Profound’s API is granted on request. If the API Keys page is not available in your Profound account, contact Profound support to have API access enabled before setting up this source.
1. Add your Profound access
- In the Sources tab, click on the “Add source” button located on the top right of your screen. Then, select the Profound option from the list of connectors.
- Click Next and you’ll be prompted to add your access.
- API Key: Your Profound API key. In Profound, open Settings from the bottom-left menu, select API Keys in the sidebar, enter a key name and an expiration date, and click Create API Key. Copy the key immediately — Profound will not show it again.
- Start Date: (Optional, advanced) The earliest day to sync the reports from. Leave it empty to start 90 days before the first run.
-
Visibility Scope: (Optional, advanced) Which brands the visibility report covers. Use
all(the default) to also rank the competitors tracked in your category, orownedto return only your own brands. - Organization IDs: (Optional, advanced) Restrict the sync to specific organizations. Leave it empty to sync every organization the API key can read.
- Category IDs: (Optional, advanced) Restrict the Answer Engine reports to specific categories. Leave it empty to sync every category the API key can read.
- Domains: (Optional, advanced) Restrict the bots and referrals reports to specific websites. Leave it empty to sync every domain connected to Profound’s Agent Analytics.
- Click Next.
2. Select your Profound streams
-
The next step is letting us know which streams you want to bring. You can select entire groups of streams or only a subset of them.
Tip: The stream can be found more easily by typing its name.
If you don’t see a stream you were expecting to find, please check if your access key has access to it. If that’s not the issue, then it’s probably because we still haven’t implemented it. Feel free to get in touch and request it!
- Click Next.
3. Configure your Profound data streams
- Customize how you want your data to appear in your catalog. Select the desired layer where the data will be placed, a name for each table (which will effectively contain the fetched data) and the type of sync.
- Layer: choose between the existing layers on your catalog. This is where you will find your new extracted tables as the extraction runs successfully.
- Table name: we suggest a name, but feel free to customize it. You have the option to add a prefix to all tables at once and make this process faster!
- Sync Type: depending on the data you are bringing to the lake, you can choose between INCREMENTAL and FULL_TABLE. Read more about Sync Types here.
- Click Next.
4. Configure your Profound data source
- Describe your data source for easy identification within your organization. You can inform things like what data it brings, to which team it belongs, etc.
- To define your Trigger, consider how often you want data to be extracted from this source. This decision usually depends on how frequently you need the new table data updated (every day, once a week, or only at specific times).
- Optionally, you can define some additional settings (if available).
- Configure Delta Log Retention and determine for how long we should store old states of this table as it gets updated. Read more about this resource here.
- Determine when to execute an Additional Full Sync. This will complement the incremental data extractions, ensuring that your data is completely synchronized with your source every once in a while.
Check your new source!
- Click Next to finalize the setup. Once completed, you’ll receive confirmation that your new source is set up!
- You can view your new source on the Sources page. Now, for you to be able to see it on your Catalog, you have to wait for the pipeline to run. You can now monitor it on the Sources page to see its execution and completion. If needed, manually trigger the pipeline by clicking on the refresh icon. Once executed, your new table will appear in the Catalog section.
If you encounter any issues, reach out to us via Slack, and we’ll gladly assist you!
How the data is replicated
The reports are extracted one day at a time, in Eastern Time — the timezone Profound uses to bucket its days. Each row carries thedate it was measured on, which is the incremental replication key. The most recent day already extracted is always re-fetched on the next run, because Profound keeps settling a day’s metrics for a while after the day closes.
The Answer Engine reports (visibility, citations, sentiment, query fan-outs and answers) are extracted per category, and every row carries the category_id and category_name it belongs to. Sentiment is additionally extracted per owned brand, and carries the brand in the asset column. The Agent Analytics reports (bots and referrals) are extracted per connected domain, carried in the domain column.
The reference streams (organizations, models, regions, domains, categories, assets, personas, category topics, category tags and prompts) have no notion of time and are always fully re-extracted.
Report dimensions that your category does not use come back empty. Because those columns are part of each report’s key, they are stored as an empty string rather than as null.
sentiment_claims on answers, persona on personas, and tags, regions, platforms and personas on prompts. They are delivered as JSON strings, so you can parse them in a Query when you need the individual keys.
Rate limits and extraction time
Profound allows 600 requests per hour per API key. The connector stays below that limit on its own and automatically waits and retries when the API asks it to, so no configuration is needed on your side. Because each Answer Engine report costs one request per category per day, a first extraction can take a while: backfilling 90 days of one category across the five reports is around 450 requests, roughly an hour of runtime. Two ways to keep syncs short:- Set Category IDs to only the categories you actually analyze.
- Deselect the Answers stream if you don’t need the raw answer text — it’s by far the largest stream, and every other report is derived from it.
Streams and Fields
Below you’ll find all available data streams from Profound and their corresponding fields.Organizations
Organizations
Every organization the API key grants access to.Key Fields:
id- Unique identifier of the organizationname- Display name of the organization
Models
Models
AI models (answer engines) monitored for the organization.Key Fields:
id- Unique identifier of the modelname- Display name of the answer engine, such as ChatGPT, Perplexity or Google Gemini
Regions
Regions
Geographic regions the organization’s prompts are run from.Key Fields:
id- Unique identifier of the regionname- Display name of the region, such as United States
Domains
Domains
Websites connected to Profound’s Agent Analytics.Key Fields:
id- Unique identifier of the domainname- Hostname of the connected website, used to scope the bots and referrals reportscreated_at- Timestamp of when the domain was connected to Profoundorganization_id- Identifier of the organization the domain belongs toorganization_name- Name of the organization the domain belongs to
Categories
Categories
Categories, the unit every Answer Engine Insights report is scoped to.Key Fields:
id- Unique identifier of the category, used as the category_id of every Answer Engine Insights reportname- Display name of the categoryinternal_name- Internal name of the category, when one is setorganization_id- Identifier of the organization the category belongs toorganization_name- Name of the organization the category belongs to
Assets
Assets
Brands tracked inside each category, owned ones and competitors alike.Key Fields:
id- Unique identifier of the assetname- Brand name of the asset. This is the value the sentiment report is keyed onwebsite- Primary website of the brandalternate_domains- Additional domains attributed to the brand (JSON array of strings)is_owned- Whether the brand belongs to the customer. False marks a competitor tracked for comparisoncreated_at- Timestamp of when the asset was added to the categorylogo_url- URL of the brand logo shown in the Profound interfacecategory_id- Identifier of the category the asset is tracked incategory_name- Name of the category the asset is tracked inorganization_id- Identifier of the organization owning the categoryorganization_name- Name of the organization owning the category
Personas
Personas
Buyer personas prompts are executed as.Key Fields:
id- Unique identifier of the personaname- Display name of the personapersona- Full persona profile — demographics, employment and behavior (JSON object)category_id- Identifier of the category the persona belongs tocategory_name- Name of the category the persona belongs toorganization_id- Identifier of the organization owning the categoryorganization_name- Name of the organization owning the category
Category Topics
Category Topics
Topics configured inside a category.Key Fields:
category_id- Identifier of the category the topic belongs tocategory_name- Name of the category the topic belongs toid- Unique identifier of the topicname- Display name of the topicstatus- Whether the topic is currently active or disabled
Prompts
Prompts
The prompts Profound runs against the answer engines for a category.Key Fields:
category_id- Identifier of the category the prompt belongs tocategory_name- Name of the category the prompt belongs toid- Unique identifier of the promptprompt- Text of the question submitted to the answer enginesprompt_type- Legacy prompt type, superseded by analysis_typesanalysis_types- Analyses this prompt feeds — visibility, sentiment or accuracy (JSON array of strings)language- Language the prompt is written instatus- Whether the prompt is currently active or disabledtopic_id- Identifier of the topic the prompt is filed undertopic_name- Name of the topic the prompt is filed undertags- Tags applied to the prompt (JSON array of objects)regions- Regions the prompt is executed from (JSON array of objects)platforms- Answer engines the prompt is executed against (JSON array of objects)personas- Personas the prompt is executed as (JSON array of objects)created_at- Timestamp of when the prompt was createdupdated_at- Timestamp of the last update to the prompt
Visibility
Visibility
Daily visibility, share of voice and average position per brand.Key Fields:
category_id- Identifier of the category the report was run forcategory_name- Name of the category the report was run fordate- Day the metrics were measured on, in Eastern Time. Used as the incremental replication keyasset_name- Brand the metrics describeasset_owned- Whether the brand belongs to the customer. False marks a competitor tracked in the same categorymodel_id- Identifier of the answer engine the row was measured on, such as ChatGPT or Perplexitymodel_name- Name of the answer engine the row was measured on, such as ChatGPT or Perplexitytopic_id- Identifier of the topic the measured prompts are filed undertopic_name- Name of the topic the measured prompts are filed underregion_id- Identifier of the geographic region the prompts were executed fromregion_name- Name of the geographic region the prompts were executed fromrank- Position of the brand in the category ranking. Only returned by ungrouped queries, so it is normally null herevisibility_score- Share of the monitored answers in which the brand appears, as a fraction between 0 and 1share_of_voice- Share of all brand mentions in the category that went to this brand, as a fraction between 0 and 1average_position- Average position the brand is mentioned at inside the answers it appears in. Lower is better
Citations
Citations
Daily citation counts and share per cited page.Key Fields:
category_id- Identifier of the category the report was run forcategory_name- Name of the category the report was run fordate- Day the metrics were measured on, in Eastern Time. Used as the incremental replication keydomain- Domain of the cited pagepage- URL of the page cited by the answer enginemodel_id- Identifier of the answer engine the row was measured on, such as ChatGPT or Perplexitymodel_name- Name of the answer engine the row was measured on, such as ChatGPT or Perplexitytopic_id- Identifier of the topic the measured prompts are filed undertopic_name- Name of the topic the measured prompts are filed underregion_id- Identifier of the geographic region the prompts were executed fromregion_name- Name of the geographic region the prompts were executed fromcount- Number of monitored answers that cited the pagecitation_share- Share of all citations in the category that went to this page, as a fraction between 0 and 1rank- Position of the page in the category citation rankingfirst_cited_at- Timestamp of the first time the page was cited
Sentiment
Sentiment
Daily positive and negative sentiment per owned brand.Key Fields:
category_id- Identifier of the category the report was run forcategory_name- Name of the category the report was run forasset- Brand the sentiment was measured fordate- Day the metrics were measured on, in Eastern Time. Used as the incremental replication keymodel_id- Identifier of the answer engine the row was measured on, such as ChatGPT or Perplexitymodel_name- Name of the answer engine the row was measured on, such as ChatGPT or Perplexitytopic_id- Identifier of the topic the measured prompts are filed undertopic_name- Name of the topic the measured prompts are filed underregion_id- Identifier of the geographic region the prompts were executed fromregion_name- Name of the geographic region the prompts were executed frompositive_sentiment- Share of the brand’s mentions carrying positive sentiment, as a fraction between 0 and 1negative_sentiment- Share of the brand’s mentions carrying negative sentiment, as a fraction between 0 and 1occurrence- How often the brand was mentioned in the monitored answersrank- Position of the row in the report ranking, when returned
Query Fan-outs
Query Fan-outs
Daily fan-out queries generated while answering the monitored prompts.Key Fields:
category_id- Identifier of the category the report was run forcategory_name- Name of the category the report was run fordate- Day the metrics were measured on, in Eastern Time. Used as the incremental replication keyquery- Search query the answer engine generated from the promptmodel_id- Identifier of the answer engine the row was measured on, such as ChatGPT or Perplexitymodel_name- Name of the answer engine the row was measured on, such as ChatGPT or Perplexityregion_id- Identifier of the geographic region the prompts were executed fromregion_name- Name of the geographic region the prompts were executed fromprompt_id- Identifier of the prompt the row was measured onprompt_name- Name of the prompt the row was measured ontotal_fanouts- Number of times the query was generated on the dayfanouts_per_execution- Average number of times the query is generated per prompt executionshare- Share of all fan-out queries in the category represented by this query, as a fraction between 0 and 1query_variations- Number of distinct wordings the query was generated withrank- Position of the query in the category ranking, when returned
Answers
Answers
One row per prompt execution, with the full answer text.Key Fields:
category_id- Identifier of the category the report was run forcategory_name- Name of the category the report was run forrun_id- Unique identifier of the prompt execution that produced the answerdate- Day the metrics were measured on, in Eastern Time. Used as the incremental replication keymodel_id- Identifier of the answer engine the row was measured on, such as ChatGPT or Perplexitymodel_name- Name of the answer engine the row was measured on, such as ChatGPT or Perplexitytopic_id- Identifier of the topic the measured prompts are filed undertopic_name- Name of the topic the measured prompts are filed underprompt_id- Identifier of the prompt the row was measured onprompt_name- Name of the prompt the row was measured onregion- Geographic region the prompt was executed frompersona- Buyer persona the prompt was executed astags- Tags applied to the executed promptresponse- Full text of the answer returned by the enginementions- Brands mentioned in the answercitations- URLs the answer cited as sourcessearch_queries- Web searches the engine ran while composing the answer, when it exposes themanalysis_types- Analyses this execution feeds — visibility, sentiment or accuracysentiment_claims- Claims about the brands extracted from the answer, with their sentiment (JSON array of objects)
Bots
Bots
Daily AI crawler visits per page, broken down by bot.Key Fields:
domain- Website the traffic was recorded ondate- Day the traffic was recorded on, in UTC. Used as the incremental replication keypath- Path on the website the bot requestedbot_name- Name of the crawler, such as GPTBot or ClaudeBotbot_provider- Company operating the crawler, such as OpenAI or Anthropicbot_type- Purpose of the visit: ai_assistant for live answers, index for search indexing, or ai_training for model trainingcount- Number of unique bot visits recordedcitations- Visits made by AI assistants fetching the page to answer a live questionindexing- Visits made by crawlers building a search indextraining- Visits made by crawlers collecting model training datalast_visit- Timestamp of the most recent visit in the bucket
Referrals
Referrals
Daily visits sent to the website by AI assistants.Key Fields:
domain- Website the traffic was recorded ondate- Day the traffic was recorded on, in UTC. Used as the incremental replication keypath- Path on the website the visitor landed onreferral_source- Assistant that sent the visitor, such as ChatGPT or Perplexityreferral_type- Category of the referrer the visit was attributed tovisits- Number of visits recordedlast_visit- Timestamp of the most recent visit in the bucket