# Adobe Experience Manager Source: https://docs.tryprofound.com/agent-analytics/adobe_experience_manager This documentation explains how to set up Adobe Experience Manager as a Cloud Service (AEMaaCS) Log Forwarding to deliver CDN logs to the Profound Agent Analytics platform. ## Overview The integration uses Adobe Experience Manager as a Cloud Service's self-serve HTTPS Log Forwarding to deliver CDN logs to our Agent Analytics API. AEM's CDN is Fastly-backed and streams logs continuously over HTTPS to the destination configured in your program. For more information about AEM Log Forwarding, [visit the Adobe documentation](https://experienceleague.adobe.com/en/docs/experience-manager-cloud-service/content/implementing/developing/log-forwarding). ## Prerequisites * An AEM as a Cloud Service program with self-serve Log Forwarding enabled (sandbox-tier programs are not supported by Adobe and cannot forward logs) * Cloud Manager access to commit to the program's Git repository and run a Config Pipeline * A Profound Log Ingestion Token for Agent Analytics ## Configuration **1. Step 1** In Cloud Manager, add your Profound Log Ingestion Token as a secret variable on the environment(s) you want to forward logs from. Navigate to **Configuration → Environment Variables → Add** and configure: * **Name** — `PROFOUND_LOG_INGESTION_TOKEN` * **Type** — `Secret` * **Service Applied** — `All` * **Value** — Your provisioned Log Ingestion Token for Profound's Agent Analytics platform (`bot_PROFOUND_LOG_INGESTION_TOKEN`) **2. Step 2** Add a `logForwarding.yaml` file under a top-level `config/` directory in your program's Git repository. This is the folder structure required by AEM's Config Pipeline. ```yaml config/logForwarding.yaml theme={null} kind: "LogForwarding" version: "1" metadata: envTypes: ["prod"] data: https: default: enabled: true url: "https://artemis.api.tryprofound.com/v1/logs/aem" authHeaderName: "X-API-Key" authHeaderValue: "${{PROFOUND_LOG_INGESTION_TOKEN}}" aem: enabled: false ``` `aem.enabled: false` disables forwarding of AEM application, Apache, and Dispatcher log families: only CDN logs are sent to Profound. `metadata.envTypes` scopes the configuration to specific environment types. Set it to `["prod"]` to forward only production CDN logs, or include `"stage"` and `"dev"` to forward those too. Omit the `metadata` block to apply to every environment the Config Pipeline targets. **3. Step 3 (optional)** AEM CDN logs do not include a referer field by default. To populate Profound's `referer` field, add a CDN request transformation that copies the incoming `Referer` header into a custom log property. Add the following to your program's CDN configuration file (for example, `config/cdn.yaml`): ```yaml config/cdn.yaml theme={null} kind: "CDN" version: "1" data: requestTransformations: rules: - name: profound-log-referer when: "*" actions: - type: set logProperty: referer value: reqHeader: referer ``` > [!NOTE] > > The `logProperty` name must be exactly lowercase `referer`. Variants like `Referer` or `referrer` will not be recognized and the field will silently remain empty. **4. Step 4** Deploy the configuration with a Cloud Manager **Config Pipeline** (Targeted Deployment). > [!WARNING] > > `logForwarding.yaml` and CDN config files are deployed only by a Config Pipeline. Full Stack and Web Tier pipelines do not deploy these files. 1. In Cloud Manager, go to **Pipelines → Add Pipeline → Targeted Deployment → Config Pipeline**. 2. Point the pipeline at the branch holding `config/logForwarding.yaml` (and `config/cdn.yaml` if you configured one). 3. Target the environment(s) where log forwarding should be active. 4. Run the pipeline. > [!NOTE] > > On first delivery, AEM's underlying Fastly delivery layer issues a one-time HTTP challenge to `/.well-known/fastly/logging/challenge` to validate the destination. Profound's endpoint handles this automatically: no action required on your side. If you inspect Cloud Manager logs and see a single challenge request, this is expected. > [!TIP] > > That's it! AEM will now send CDN logs to Profound. Data should begin appearing in your dashboard within a few minutes. ## What gets captured AEM CDN log entries are mapped to Profound's visit schema as follows: * Time and IP * `timestamp` — Time the CDN received the request. * `cli_ip` — Client IP address. * Request * `host` — Host header from the client request. * `url` — Path and query string requested. * `method` — HTTP method. * `req_ua` — User-Agent header reported by the client. * `referer` — Referer header (only populated when the optional CDN request transformation in Step 3 is deployed). * Response * `status` — HTTP response status code. * `ttfb` — Time to first byte, in milliseconds. * Response body size — Adobe's CDN log schema does not emit a native response-size field, so this is reported as `0`. ## Troubleshooting * If logs aren't appearing, confirm the pipeline that deployed was a **Config Pipeline**, not Full Stack or Web Tier * If the pipeline succeeds but no requests reach Profound, the program may still be on Adobe's legacy support-ticket log forwarding. File a ticket with Adobe to migrate to self-serve Log Forwarding before retrying * If volume looks roughly 2× expected, legacy and self-serve log forwarding may be running in parallel during a migration window (Adobe typically resolves this within a few hours) * For `401` or `403` responses, verify `PROFOUND_LOG_INGESTION_TOKEN` is set with **Service Applied: All** and that the token is active in Profound * Confirm the `url` begins with `https://` (AEM rejects the configuration at deploy time otherwise) * Ensure `aem.enabled: false` is present so non-CDN log families are not forwarded ## Additional Resources * [Adobe — Log Forwarding for AEM as a Cloud Service](https://experienceleague.adobe.com/en/docs/experience-manager-cloud-service/content/implementing/developing/log-forwarding) * [Adobe — CDN log entry format](https://experienceleague.adobe.com/en/docs/experience-manager-cloud-service/content/implementing/developing/logging#cdn-log) * [Adobe — Use Config Pipelines](https://experienceleague.adobe.com/en/docs/experience-manager-cloud-service/content/operations/config-pipeline) * Contact [support@tryprofound.com](mailto:support@tryprofound.com) for API-related questions ## Security Considerations * Store the Log Ingestion Token as a Cloud Manager secret variable, never as a plaintext environment value * Regularly rotate your Log Ingestion Token * Monitor log forwarding activity for unusual patterns # Akamai Datastream2 Integration Source: https://docs.tryprofound.com/agent-analytics/akamai This documentation explains how to set up Akamai Datastream2 to forward your CDN logs to the Profound Agent Analytics platform. ## Overview The integration uses Akamai Datastream2 to forward your CDN logs to our Agent Analytics API. Akamai Datastream2 is a service that enables reliable delivery of streaming data to various destinations including HTTP endpoints. For more information about Akamai Datastream2, [visit the Akamai documentation](https://techdocs.akamai.com/datastream2/docs/welcome-datastream2). ## Prerequisites * An Akamai account with Datastream2 add-on * Access to your Akamai Datastream2 configuration * A Profound Log Ingestion Token for Agent Analytics ## Configuration ![Akamai Detected](https://mintcdn.com/profound-37face47/dU1U8PbY91PjiXyk/images/agent-analytics/akamai/akamai_setup.png?fit=max\&auto=format\&n=dU1U8PbY91PjiXyk\&q=85\&s=d70903421c141d21d2f4beb6cb900afc) **1. Step 1** Sign in to Akamai Control Center and navigate to [DataStream](https://control.akamai.com/apps/data-stream-ui/#/streams/group/all) in the left sidebar. Click `Create a stream` ![DataStream create stream Navigation](https://mintcdn.com/profound-37face47/dU1U8PbY91PjiXyk/images/agent-analytics/akamai/create_a_stream.png?fit=max\&auto=format\&n=dU1U8PbY91PjiXyk\&q=85\&s=14c3af737e62235af30ed3f7db30cb07) **2. Step 2** Select your property and click `Next` ![DataStream property selection](https://mintcdn.com/profound-37face47/dU1U8PbY91PjiXyk/images/agent-analytics/akamai/datastream_start.png?fit=max\&auto=format\&n=dU1U8PbY91PjiXyk\&q=85\&s=2486ffc50acbe122039bc01bdb64076a) **3. Step 3** Select the following options in each section: **Log Information** ![log information](https://mintcdn.com/profound-37face47/dU1U8PbY91PjiXyk/images/agent-analytics/akamai/log_data.png?fit=max\&auto=format\&n=dU1U8PbY91PjiXyk\&q=85\&s=4d71519f3395e9515b691d54839133cd) **Message Exchange Data** ![message data](https://mintcdn.com/profound-37face47/dU1U8PbY91PjiXyk/images/agent-analytics/akamai/message_data.png?fit=max\&auto=format\&n=dU1U8PbY91PjiXyk\&q=85\&s=fbe0bc758691c5aaa77de1fc6404c5b8) **Request Header Data** ![request header data](https://mintcdn.com/profound-37face47/dU1U8PbY91PjiXyk/images/agent-analytics/akamai/header_data.png?fit=max\&auto=format\&n=dU1U8PbY91PjiXyk\&q=85\&s=16bfab22e601431817b5d61acfb24f7d) **Network Data** ![network data](https://mintcdn.com/profound-37face47/dU1U8PbY91PjiXyk/images/agent-analytics/akamai/network.png?fit=max\&auto=format\&n=dU1U8PbY91PjiXyk\&q=85\&s=28c02304416dfd93365626ce8cfa3f28) **Log Format** ![log format](https://mintcdn.com/profound-37face47/dU1U8PbY91PjiXyk/images/agent-analytics/akamai/log_format.png?fit=max\&auto=format\&n=dU1U8PbY91PjiXyk\&q=85\&s=76d889d5b9ed3dc9c59b435fe7428019) Read more about these fields in the [Akamai documentation](https://techdocs.akamai.com/datastream2/docs/data-set-parameters) **4. Step 4** Add authentication information: * From the **Destination** dropdown, select **Custom HTTPS**. * Select **BASIC** as the **Authentication** type. * Enter `https://artemis.api.tryprofound.com/v1/logs/akamai` as the **URL**. * Enter your organization name in the **Username** field. * Enter your Log Ingestion Token in the **Password** field. * Check **Send compressed data**. ![authentication](https://mintcdn.com/profound-37face47/dU1U8PbY91PjiXyk/images/agent-analytics/akamai/authentication.png?fit=max\&auto=format\&n=dU1U8PbY91PjiXyk\&q=85\&s=fd8855bdeebf8f995ba954a7ebe86a33) **5. Step 5** Select **JSON** as the **Log format**. ![output format](https://mintcdn.com/profound-37face47/dU1U8PbY91PjiXyk/images/agent-analytics/akamai/log_format.png?fit=max\&auto=format\&n=dU1U8PbY91PjiXyk\&q=85\&s=76d889d5b9ed3dc9c59b435fe7428019) **6. Step 6** Choose **30** seconds as the push frequency. ![push frequency](https://mintcdn.com/profound-37face47/dU1U8PbY91PjiXyk/images/agent-analytics/akamai/frequency.png?fit=max\&auto=format\&n=dU1U8PbY91PjiXyk\&q=85\&s=92de55c3ba5382bce59cac531094a217) **7. Step 7** Review the configuration. It should look like the following: ![Review configuration](https://mintcdn.com/profound-37face47/dU1U8PbY91PjiXyk/images/agent-analytics/akamai/review_configuration.png?fit=max\&auto=format\&n=dU1U8PbY91PjiXyk\&q=85\&s=620cb181cc50241f6db1a75fe1c60503) When ready, click `Save stream`. > [!WARNING] > > DataStream2 takes approximately **60 minutes** to start sending logs. > > Please wait for **60 minutes** before checking for logs. **8. Step 8** After creating the stream, you will now be instructed to activate the stream. ![activate stream](https://mintcdn.com/profound-37face47/dU1U8PbY91PjiXyk/images/agent-analytics/akamai/activate_stream.png?fit=max\&auto=format\&n=dU1U8PbY91PjiXyk\&q=85\&s=b3154f5ac1dbc08cec3ea597d1352300) Click `Proceed to Property Manager` and select the property you created the stream for. **9. Step 9** Click **Edit a new version** to add the stream to the property. Navigate to the **Property Configuration Settings**. Select **Standard property behavior** from the `+ Behavior` dropdown. ![add behavior](https://mintcdn.com/profound-37face47/dU1U8PbY91PjiXyk/images/agent-analytics/akamai/add_behavior.png?fit=max\&auto=format\&n=dU1U8PbY91PjiXyk\&q=85\&s=31859c483fef04f5143b991482e11c26) Search for **DataStream** and click `Insert Behavior` ![datastream behavior](https://mintcdn.com/profound-37face47/dU1U8PbY91PjiXyk/images/agent-analytics/akamai/datastream_behavior.png?fit=max\&auto=format\&n=dU1U8PbY91PjiXyk\&q=85\&s=10ece92a22b6a37d5abf9a765a0e66ad) > [!NOTE] > > The behavior will show **DataStream 1**. Ignore this as you will select version 2 later. **10. Step 10** Scroll down to the **DataStream** section and select: * **DataStream2** from the **Stream Version** dropdown. * Toggle **Enable** to **On**. * Select the stream you created in the **Stream Name**. * Select a sample rate. **100%** is recommended. ![datastream settings](https://mintcdn.com/profound-37face47/dU1U8PbY91PjiXyk/images/agent-analytics/akamai/add_stream_to_property.png?fit=max\&auto=format\&n=dU1U8PbY91PjiXyk\&q=85\&s=2c1d7e35b4578b1d9d5088abca0c9992) **11. Step 11** Select **Log Delivery** from the left sidebar. Enable: * **Log Host Header** * **Log Referer Header** * **Log User-Agent Header** Leave the other settings as their default values. ![log delivery settings](https://mintcdn.com/profound-37face47/dU1U8PbY91PjiXyk/images/agent-analytics/akamai/log_delivery_behaviors.png?fit=max\&auto=format\&n=dU1U8PbY91PjiXyk\&q=85\&s=e5ab3c16f61a247431ddd4f38a9ad445) **12. Step 12** Save the configuration and activate the new version. > [!TIP] > > That's it! Akamai will now send real-time logs to Profound. Data should begin appearing in your dashboard within **60 minutes** of activating the stream. ## Troubleshooting * Ensure your stream is activated, connected to the property, and that the property has been updated * Ensure your Log Ingestion Token is correct ## Additional Resources * [Akamai Datastream2 Documentation](https://techdocs.akamai.com/datastream2/docs/welcome-datastream2) * [Creating a Stream Documentation](https://techdocs.akamai.com/datastream2/docs/create-stream) * [Data Set Parameters Documentation](https://techdocs.akamai.com/datastream2/docs/data-set-parameters) * Contact [support@tryprofound.com](mailto:support@tryprofound.com) for API-related questions ## Security Considerations * Regularly rotate your Log Ingestion Token * Monitor your log drain usage for unusual patterns or unexpected traffic spikes # Akamai Source: https://docs.tryprofound.com/agent-analytics/akamai-s3 Deliver Akamai access logs to Profound through Amazon S3. ## Overview Send Akamai access logs to your assigned Profound S3 destination to see agent traffic in Agent Analytics. This guide covers CDN request logs delivered through DataStream 2. > [!NOTE] > > Contact [Profound support](mailto:support@tryprofound.com) to confirm availability and arrange your destination settings and credentials before configuring delivery. For delivery over HTTP, use the [Akamai HTTPS integration](/agent-analytics/akamai). ## Prerequisites * An Akamai account with DataStream 2 enabled. * Permission to create and activate streams for your properties. * Access to Property Manager to configure request header logging and any required DataStream behavior. ## Encryption This guide uses **SSE-S3 (AES256)** to encrypt your logs at rest with keys managed by Amazon S3. Profound configures encryption on your destination. ## Configuration **1. Arrange your destination** Share the domains you want to monitor with Profound support. Support will confirm source readiness and coordinate delivery of your bucket name, folder path, region, and AWS credentials. Keep the secret access key in your credential manager and enter it directly into Akamai. Avoid including it in support messages or screenshots. **2. Create a stream** In Akamai Control Center, open **Analytics & monitor > DataStream** and select **Create stream**. Choose CDN delivery logs, enter a descriptive name, and select the properties that serve your domains. **3. Select log fields** Select **JSON** as the log format. Profound processes one JSON object per line with the following fields: | Field | Used for | | - | - | | `reqTimeSec` | Request time | | `cliIP` | Client address | | `reqHost` | Requested domain | | `reqMethod`, `reqPath` | Requested resource | | `statusCode` | Response status | | `UA` | Agent identification | Include `queryStr`, `referer`, and `totalBytes` for query strings, referral information, and response size. In Property Manager, enable logging for the Host, User-Agent, and Referer headers so the selected fields contain request values. See Akamai's [data set parameters](https://techdocs.akamai.com/datastream2/docs/data-set-parameters) for the corresponding settings. **4. Configure the S3 destination** Select **S3** on the **Destination** tab and enter: | Setting | Value | | - | - | | Name | A descriptive name | | Bucket | The bucket supplied by Profound | | Folder path | The folder path supplied by Profound | | Region | `us-west-2` (Oregon) | | Access key ID | The AWS access key ID arranged with Profound | | Secret access key | The matching AWS secret access key | Select **Validate & Save** to check access. Akamai writes a verification file to the destination during validation. DataStream 2 delivers gzip-compressed files to S3. Keep the default log filenames; Profound expects compressed filenames to end in `.gz`. See Akamai's [Amazon S3 destination guide](https://techdocs.akamai.com/datastream2/docs/stream-amazon-s3) for details. **5. Activate delivery** After Profound confirms readiness, review and activate your stream. Set sampling to **100%** to capture all matching requests. For Property Manager-dependent streams, enable the **DataStream** behavior, select your DataStream 2 stream, and activate the property version. DataStream-managed streams use the stream configuration directly. Follow Akamai's [activation steps](https://techdocs.akamai.com/datastream2/docs/quick-start) for your integration type. Activation can take up to an hour. ## Verify ingestion Generate traffic to your configured domain. Once delivery and processing have completed, open Agent Analytics and select a date range covering those requests to check for expected agent traffic. If data is missing, share your domain, stream ID, request time, and any delivery error with Profound support. ## Troubleshooting | Problem | What to check | | - | - | | Destination validation fails | Compare the bucket, folder path, region, and credentials with your assigned settings. Ask support to check destination permissions. | | No logs arrive | Confirm the stream and any required property version are active and receiving traffic. | | Files arrive but data is missing | Check the JSON field selection, request header logging, and your selected date range. | | Access fails after a credential change | Update the destination with the replacement credentials and validate again. | ## Additional Resources * [Akamai: Stream logs to Amazon S3](https://techdocs.akamai.com/datastream2/docs/stream-amazon-s3) * [Akamai: DataStream 2 quick start](https://techdocs.akamai.com/datastream2/docs/quick-start) * [Akamai: Log format](https://techdocs.akamai.com/datastream2/docs/log-format) * [Akamai HTTPS integration](/agent-analytics/akamai) * [Contact Profound support](mailto:support@tryprofound.com) # Amazon CloudFront Integration (Data Firehose) Source: https://docs.tryprofound.com/agent-analytics/aws_firehose_cloudfront This documentation explains how to set up Amazon CloudFront real-time logs delivery to Profound Agent Analytics platform using Amazon Data Firehose. ## Overview The integration uses Amazon Data Firehose to forward CloudFront real-time logs to our Agent Analytics API. Amazon Data Firehose is an AWS service that enables reliable delivery of streaming data to various destinations including HTTP endpoints. For more information about CloudFront real-time logs, [visit the AWS documentation](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/real-time-logs.html). ## Prerequisites * An AWS Account with CloudFront and Amazon Data Firehose permissions * Access to your CloudFront distribution configuration * A Profound Log Ingestion Token for Agent Analytics ## Configuration ![Cloudfront Detected](https://mintcdn.com/profound-37face47/dU1U8PbY91PjiXyk/images/agent-analytics/cloudfront_firehose/cloudfront_setup.png?fit=max\&auto=format\&n=dU1U8PbY91PjiXyk\&q=85\&s=5356d4e17071b78c4a18d7916b638f61) **1. Step 1** Sign in to the AWS Console and navigate to the Amazon Data Firehose console ![Firehose Console Navigation](https://mintcdn.com/profound-37face47/dU1U8PbY91PjiXyk/images/agent-analytics/cloudfront_firehose/firehose_console_nav.png?fit=max\&auto=format\&n=dU1U8PbY91PjiXyk\&q=85\&s=31ed6890bce8b6d3c2ea4b5a097256da) **2. Step 2** Create a new delivery stream, select "Direct PUT" as source and "HTTP Endpoint" as destination ![Firehose HTTP Destination](https://mintcdn.com/profound-37face47/dU1U8PbY91PjiXyk/images/agent-analytics/cloudfront_firehose/firehose_http_destination.png?fit=max\&auto=format\&n=dU1U8PbY91PjiXyk\&q=85\&s=b854af041135c268be901b808c13fd31) **3. Step 3** 1. Configure the HTTP endpoint with the following URL format: ```http theme={null} https://artemis.api.tryprofound.com/v1/logs/aws_data_firehose_cloudfront ``` 2. For authentication, provide your Profound Log Ingestion Token as the access key (we recommend using AWS Secrets Manager for secure token storage). > [!TIP] > > If you are using the [AWS Secrets Manager](https://docs.aws.amazon.com/secretsmanager/latest/userguide/intro.html), please use the following [JSON format](https://docs.aws.amazon.com/firehose/latest/dev/secrets-manager-whats-secret.html) when creating the secret: ```json theme={null} { "api_key": "bot_PROFOUND_LOG_INGESTION_TOKEN" } ``` 3. Enable GZIP content encoding. ![Firehose Destination Settings](https://mintcdn.com/profound-37face47/dU1U8PbY91PjiXyk/images/agent-analytics/cloudfront_firehose/firehose_http_destination_settings.png?fit=max\&auto=format\&n=dU1U8PbY91PjiXyk\&q=85\&s=f39d1fa3ee17e2fd13a63fafad1f60b8) 4. Create a new S3 bucket to store failed delivery logs (required by AWS) ![Firehose S3 Destination](https://mintcdn.com/profound-37face47/dU1U8PbY91PjiXyk/images/agent-analytics/cloudfront_firehose/s3_backup.png?fit=max\&auto=format\&n=dU1U8PbY91PjiXyk\&q=85\&s=d345ec2b32d1099f661055cd025b2bc0) **4. Step 4** Go to your CloudFront distribution and navigate to the "Logging" tab. ![CloudFront Logging Tab](https://mintcdn.com/profound-37face47/dU1U8PbY91PjiXyk/images/agent-analytics/cloudfront_firehose/cloudfront_logging.png?fit=max\&auto=format\&n=dU1U8PbY91PjiXyk\&q=85\&s=cb780dbc9c00f2efcc10fab968fbd21e) Click the "Add" button and select "Kinesis Data Firehose" as the destination. (Kinesis Data Firehose is the legacy name for Amazon Data Firehose) ![CloudFront Logging Add](https://mintcdn.com/profound-37face47/dU1U8PbY91PjiXyk/images/agent-analytics/cloudfront_firehose/cloudfront_add_kinesis_data_firehose.png?fit=max\&auto=format\&n=dU1U8PbY91PjiXyk\&q=85\&s=7526bea9c504503d2019e7021784f368) **5. Step 5** Now you should be in the "Add standard logging destination" screen. Select the delivery stream you created in Step 3. ![CloudFront Logging Select](https://mintcdn.com/profound-37face47/dU1U8PbY91PjiXyk/images/agent-analytics/cloudfront_firehose/cloudfront_select_stream.png?fit=max\&auto=format\&n=dU1U8PbY91PjiXyk\&q=85\&s=30d591f5607b44e2e98bb3b827f45361) Under "Additional settings - optional", select the following fields: ![CloudFront Logging Additional Settings](https://mintcdn.com/profound-37face47/dU1U8PbY91PjiXyk/images/agent-analytics/cloudfront_firehose/cloudfront_select.png?fit=max\&auto=format\&n=dU1U8PbY91PjiXyk\&q=85\&s=885ebac7639ad545f865d39ba7825f7c) * Time and IP * `date` - Date when the request was completed * `time` - Time when the request was completed * `c-ip` - Client IP address * Request Details * `cs-method` - HTTP request method * `x-host-header` - Host header value of the request * `cs-uri-stem` - Request URI path * `cs-uri-query` - Request query string * `cs(User-Agent)` - Client user agent * `cs(Referer)` - Request referrer * Response Details * `sc-status` - HTTP response status * `sc-bytes` - Response size in bytes * `time-taken` - Request processing time **6. Step 6** Select `JSON` as the **Output format**. ![Output format](https://mintcdn.com/profound-37face47/dU1U8PbY91PjiXyk/images/agent-analytics/cloudfront_firehose/log_format.png?fit=max\&auto=format\&n=dU1U8PbY91PjiXyk\&q=85\&s=9958635a099e3a3ab88597d0df3fcea8) Click **Submit** to save the configuration. > [!TIP] > > That's it! CloudFront will now send real-time logs to Data Firehose, which forwards them to Profound. Data should begin appearing in your dashboard within a few minutes. ## Troubleshooting * If logs aren't appearing, verify your Firehose delivery stream status in CloudWatch * Check Data Firehose monitoring for delivery errors * Ensure your Log Ingestion Token is correct * Verify CloudFront real-time logging is enabled for your distribution * Check IAM roles have proper permissions for both CloudFront and Firehose ## Additional Resources * [Amazon CloudFront Real-time Logs Documentation](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/real-time-logs.html) * [Amazon Kinesis Data Firehose Documentation](https://docs.aws.amazon.com/firehose/latest/dev/what-is-this-service.html) * Contact [support@tryprofound.com](mailto:support@tryprofound.com) for API-related questions ## Security Considerations * Store Log Ingestion Tokens in AWS Secrets Manager * Regularly rotate your Log Ingestion Token * Monitor CloudWatch logs for unusual patterns * Enable CloudTrail for API activity monitoring * Use IAM roles with least privilege access # Cloudflare Source: https://docs.tryprofound.com/agent-analytics/cloudflare-s3 Deliver Cloudflare HTTP request logs to Profound through Amazon S3. ## Overview Send Cloudflare Logpush logs to your assigned Profound S3 destination to see agent traffic in Agent Analytics. This guide covers Cloudflare HTTP request logs and uses SSE-S3 encryption. > [!NOTE] > > Contact [Profound support](mailto:support@tryprofound.com) to receive your S3 bucket name and destination prefix. The destination region is `us-west-2` (US West, Oregon). When Cloudflare asks you to verify ownership, contact support for your ownership token. For delivery over HTTP, use the [Cloudflare Logpush streaming integration](/agent-analytics/cloudflare_logpush). ## Prerequisites * Access to Cloudflare HTTP request Logpush. * Permission to create and manage Logpush jobs for your domain. ## Encryption Use **SSE-S3 (AES256)** for this Cloudflare integration. Amazon S3 encrypts your stored logs. You do not need to configure a KMS key. ## Configuration **1. Get your destination settings** Contact [Profound support](mailto:support@tryprofound.com) with your domain and Cloudflare zone details to receive your S3 bucket name and destination prefix. The destination region is `us-west-2` (US West, Oregon). Use these values exactly as supplied. Profound configures the source, destination bucket, and write permissions for your organization. | Setting | Value | | - | - | | Bucket | Your assigned Profound bucket | | Path | Your complete assigned prefix | | Region | `us-west-2` (US West, Oregon) | | Encryption | SSE-S3 (AES256) | Your S3 destination uses this format: ```text theme={null} s3://// ``` Use the prefix exactly as provided by Profound. **2. Open Cloudflare Logpush** Sign in to the Cloudflare dashboard, select your domain, and open **Investigate → Logpush**. Select **Create a Logpush job**. ![Cloudflare Investigate menu with Logpush selected and the Create a Logpush job button](https://mintcdn.com/profound-37face47/0hJzfTbdqU5C4M5V/images/agent-analytics/cloudflare_s3/logpush-navigation.png?fit=max\&auto=format\&n=0hJzfTbdqU5C4M5V\&q=85\&s=172f44804eab0eaab7d87cc225c8d2f6) **3. Select Amazon S3** Choose **Amazon S3** as the destination. ![Cloudflare destination selection with the Amazon S3 option](https://mintcdn.com/profound-37face47/0hJzfTbdqU5C4M5V/images/agent-analytics/cloudflare_s3/select-destination.png?fit=max\&auto=format\&n=0hJzfTbdqU5C4M5V\&q=85\&s=537076e0406c3ed0f6a74e220ea34f54) **4. Enter your destination details** 1. Enter the bucket name and destination path supplied by Profound. 2. Set **Bucket region** to **US West (Oregon) — `us-west-2`**. 3. Select **My policy requires AWS SSE-S3 AES256 Server Side Encryption**. 4. Select **Continue** to start ownership verification. ![Cloudflare S3 destination form showing bucket, path, region, and the SSE-S3 encryption checkbox](https://mintcdn.com/profound-37face47/0hJzfTbdqU5C4M5V/images/agent-analytics/cloudflare_s3/destination-details.png?fit=max\&auto=format\&n=0hJzfTbdqU5C4M5V\&q=85\&s=8e3bea5c0f18e1dd096f679fcf1504ff) The screenshot uses placeholder bucket and path values. Replace them with the values supplied by Profound. Profound handles the bucket policy. If Cloudflare reports an access error, contact support with the source details. **5. Complete ownership verification** Cloudflare writes a challenge file to the destination. Ask Profound support for the token associated with your source, then enter it in Cloudflare to verify the destination. ![Cloudflare ownership verification with the token and challenge-file path blurred](https://mintcdn.com/profound-37face47/0hJzfTbdqU5C4M5V/images/agent-analytics/cloudflare_s3/prove-ownership.png?fit=max\&auto=format\&n=0hJzfTbdqU5C4M5V\&q=85\&s=b034854b36798a9ae46abd9e5310ff2e) If verification fails, confirm that the token and destination belong to the same setup attempt. Ask support for help if you need to repeat verification. **6. Configure HTTP request logs** Select the **HTTP requests** dataset. Include the fields below, filter the hostname to your configured domain, and use RFC3339 timestamps. Keep the standard JSON output, with one record per line. ![Cloudflare dataset selection with the HTTP requests option](https://mintcdn.com/profound-37face47/0hJzfTbdqU5C4M5V/images/agent-analytics/cloudflare_s3/select-dataset.png?fit=max\&auto=format\&n=0hJzfTbdqU5C4M5V\&q=85\&s=4bbac60cd1b29d8c6c0c98aac5973120) | Fields | Used for | | - | - | | `ClientIP` | Client address | | `ClientRequestHost` | Requested domain | | `ClientRequestMethod`, `ClientRequestURI` | Requested resource | | `ClientRequestReferer`, `ClientRequestUserAgent` | Referral and agent analysis | | `EdgeStartTimestamp`, `EdgeEndTimestamp` | Request timing | | `EdgeResponseStatus`, `EdgeResponseBytes` | Response details | These are the same record fields used by Profound's Cloudflare streaming integration. To capture all traffic, turn off sampling. **7. Enable delivery** Once ownership verification is complete and Profound confirms the source is ready, save and enable your job. Generate traffic to your configured domain and check Cloudflare for delivery errors. ## Verify ingestion Open Agent Analytics for your domain and select a date range covering the delivered records. Confirm that expected agent traffic appears. Upload success alone does not confirm successful processing. Logs appear after Cloudflare delivers a batch and Profound processes it. If data is missing, provide support with your domain, Logpush job ID, delivery time, and the S3 file path or error shown by Cloudflare. Do not include credentials. ## Troubleshooting | Problem | What to check | | - | - | | Destination access denied | Confirm the supplied bucket, region, prefix, and SSE-S3 setting. Ask Profound to verify destination permissions. | | Ownership challenge fails | Confirm the token matches the exact destination and current setup attempt. Request help retrieving or renewing it. | | Delivery succeeds but data is missing | Check source readiness, `ClientRequestHost`, the field selection, and the selected date range. | | Traffic counts are incomplete | Review hostname filters and sampling, and allow time for delivery and processing. | ## Additional Resources * [Cloudflare: Configure Logpush to Amazon S3](https://developers.cloudflare.com/logs/logpush/logpush-job/enable-destinations/aws-s3/) * [Cloudflare streaming integration](/agent-analytics/cloudflare_logpush) * [Contact Profound support](mailto:support@tryprofound.com) # Cloudflare Integration (Logpush) Source: https://docs.tryprofound.com/agent-analytics/cloudflare_logpush This documentation explains how to set up and deploy a Cloudflare Worker that captures HTTP request data and forwards it to Profound Agent Analytics platform using Cloudflare Logpush. ## Overview The integration uses a Cloudflare Logpush that runs as middleware to collect request metadata and send it to our Agent Analytics API. Cloudflare Logpush is a Cloudflare Enterprise feature that allows you to forward Cloudflare logs to a non-Cloudflare destination like Profound. For more information related to Cloudflare Logpush, [visit the documentation site](https://developers.cloudflare.com/logs/about/). ## Prerequisites * A Cloudflare account with Enterprise plan * Access to your domain's Cloudflare configuration * A Profound Log Ingestion Token for Agent Analytics > [!TIP] > > Using Cloudflare Free/Pro plan? Check out our [integration guide using Cloudflare Workers](/agent-analytics/cloudflare_worker). ![Logpush Detected](https://mintcdn.com/profound-37face47/dU1U8PbY91PjiXyk/images/agent-analytics/cloudflare_logpush/logpush_setup.png?fit=max\&auto=format\&n=dU1U8PbY91PjiXyk\&q=85\&s=1f3d1936ae852ac98962c9167a90e126) ## Configuration **1. Step 1** Select your domain on Cloudflare Dashboard, go to **Analytics & Logs -> Logpush** ![Cloudflare Logpush Navigation](https://mintcdn.com/profound-37face47/dU1U8PbY91PjiXyk/images/agent-analytics/cloudflare_logpush/cloudflare_logpush_nav.png?fit=max\&auto=format\&n=dU1U8PbY91PjiXyk\&q=85\&s=625b1175af5e6297333789cb96f6da7b) **2. Step 2** Create a new Logpush job, select HTTP destination ![Cloudflare HTTP Destination](https://mintcdn.com/profound-37face47/dU1U8PbY91PjiXyk/images/agent-analytics/cloudflare_logpush/cloudflare_http_destination.png?fit=max\&auto=format\&n=dU1U8PbY91PjiXyk\&q=85\&s=ed84b38394cdeec008e1ce996f9115d6) **3. Step 3** Use the following API URL format to include your Profound Log Ingestion Token and continue ```http theme={null} https://artemis.api.tryprofound.com/v1/logs/cloudflare_logpush?header_X-API-Key=bot_PROFOUND_LOG_INGESTION_TOKEN ``` **4. Step 4** Select `Filtered logs` under **If logs match...** And filter by the `ClientRequestHost` field to match your domain > [!TIP] > > Ensure you use your domain in the filter. Do not use `www.tryprofound.com`, this is only an example. ![Cloudflare Filter Logs](https://mintcdn.com/profound-37face47/dU1U8PbY91PjiXyk/images/agent-analytics/cloudflare_logpush/cloudflare_filter_logs.png?fit=max\&auto=format\&n=dU1U8PbY91PjiXyk\&q=85\&s=39352a097e7fc3cfd9248d64b684c3ee) **5. Step 5** Select HTTP requests dataset, and choose the following fields to send: * Request * `ClientIP` - IP Address of the client. * `ClientRequestHost` - Host requested by the client. * `ClientRequestMethod` - HTTP method of client request. * `ClientRequestReferer` - HTTP request referrer. * `ClientRequestURI` - URI requested by the client. * `ClientRequestUserAgent` - User agent reported by the client. * Performance * `EdgeStartTimestamp` - Timestamp at which the edge received request from the client. * `EdgeEndTimestamp` - Timestamp at which the edge finished sending response to the client. * Response * `EdgeResponseBytes` - Number of bytes returned by the edge to the client. * `EdgeResponseStatus` - HTTP status code returned by Cloudflare to the client. That's it! You have now successfully configured Profound Agent Analytics for your website. Data should begin to populate on your dashboard within an hour. ## Troubleshooting * If logs aren't appearing, verify your Log Ingestion Token and URL * Check Workers > Analytics for any execution errors * Ensure your route pattern matches your domain configuration * Verify the Worker is receiving requests by checking the Cloudflare dashboard metrics ## Additional Resources * [Cloudflare Logpush Documentation](https://developers.cloudflare.com/logs/about/) * [Cloudflare Enable HTTP destination Documentation](https://developers.cloudflare.com/logs/get-started/enable-destinations/http/) * Contact [support@tryprofound.com](mailto:support@tryprofound.com) for API-related questions ## Security Considerations * Store Log Ingestion Tokens as secrets in production environments * Regularly rotate Log Ingestion Tokens * Monitor Worker usage and logs for unusual patterns # Cloudflare Integration (Worker) Source: https://docs.tryprofound.com/agent-analytics/cloudflare_worker Set up and deploy a Cloudflare Worker that captures HTTP request data and forwards it to Profound Agent Analytics. ## Overview The integration uses a Cloudflare Worker that runs as middleware to collect request metadata and send it to our Agent Analytics API. The Worker captures important request information like IP addresses, user agents, and referrers without affecting the actual request handling. ## Prerequisites * A Cloudflare account with access to Workers * Node.js installed on your development machine * Access to your domain's Cloudflare configuration * A Profound Log Ingestion Token for Agent Analytics > [!TIP] > > Using Cloudflare Enterprise plan? Check out our [integration guide using Cloudflare Logpush](https://docs.tryprofound.com/agent-analytics/cloudflare_logpush). Logpush is always preferable to a Worker: it is out-of-band and cannot affect live traffic. > [!WARNING] > > A Worker on a `*` route sits in the request path for **every** request to that hostname, so it can affect production traffic. Use the code below as-is, and in particular: > > * Never clone the response or read the response body inside the Worker. Buffering bodies can exceed the Worker's 128 MB isolate memory limit, which Cloudflare surfaces to the visitor (or crawler) as [Error 1102 `Worker exceeded resource limits`](https://developers.cloudflare.com/support/troubleshooting/http-status-codes/cloudflare-1xxx-errors/error-1102/). > > * Keep the logging call inside `ctx.waitUntil()` and swallow its errors so a slow or failing log request can never turn into a 5xx. > > * Keep sensitive paths out of the Worker entirely. The path list in the code below only skips logging; requests still pass through the Worker. To take checkout, cart, and admin paths out of the Worker's path completely, narrow the route pattern itself (or add a higher-priority route that is not bound to the Worker). > > Symptoms of a Worker that breaks these rules are intermittent 5xx responses on large or streamed responses, and downstream fallout such as Google Merchant Center / Google Ads disapprovals ("destination not working", "image not accessible") when `AdsBot-Google` hits one of those errors during a crawl. > [!NOTE] > > Running a Shopify storefront? Do not put a Worker in front of it. Use one of the log drain options in our [Shopify guide](https://docs.tryprofound.com/agent-analytics/shopify) instead, which collects logs out-of-band. ![Logpush Detected](https://mintcdn.com/profound-37face47/dU1U8PbY91PjiXyk/images/agent-analytics/cloudflare_worker/worker_setup.png?fit=max\&auto=format\&n=dU1U8PbY91PjiXyk\&q=85\&s=03401e0694f16e2b2076d70eb045e534) ## Implementation guide **1. Set up your development environment** Create a new Worker project and install dependencies: ### Create a new Worker project First, use the Cloudflare Worker CLI to create a new Worker project: In this example, we're using version `2.37.4` of the Cloudflare Worker CLI. You may use the latest version, but there might be some minor process differences. ```bash theme={null} npm create cloudflare@2.37.4 -- log-collector ``` After npm launches, you'll be prompted to select a starting point. Select "Hello World" as your starting category. ![Cloudflare Worker Step 1 - Choose Starting Point](https://mintcdn.com/profound-37face47/dU1U8PbY91PjiXyk/images/agent-analytics/cloudflare_worker/create-cloudflare-application-step1-1.png?fit=max\&auto=format\&n=dU1U8PbY91PjiXyk\&q=85\&s=49f53028fff87639f1bbe844d9591ade) Select the "Hello World" worker template. ![Cloudflare Worker Step 1 - Select Worker Template](https://mintcdn.com/profound-37face47/dU1U8PbY91PjiXyk/images/agent-analytics/cloudflare_worker/create-cloudflare-application-step1-2.png?fit=max\&auto=format\&n=dU1U8PbY91PjiXyk\&q=85\&s=f225e20e3063a3c6dfd647c8d8835e09) Select the "TypeScript" language. ![Cloudflare Worker Step 1 - Select Language](https://mintcdn.com/profound-37face47/dU1U8PbY91PjiXyk/images/agent-analytics/cloudflare_worker/create-cloudflare-application-step1-3.png?fit=max\&auto=format\&n=dU1U8PbY91PjiXyk\&q=85\&s=96537f92fa73752faa35b98a68351484) Now the CLI will create a new project with the name `log-collector` and install the necessary dependencies. Select Git for version control. ![Cloudflare Worker Step 2 - Select Version Control](https://mintcdn.com/profound-37face47/dU1U8PbY91PjiXyk/images/agent-analytics/cloudflare_worker/create-cloudflare-application-step2-1.png?fit=max\&auto=format\&n=dU1U8PbY91PjiXyk\&q=85\&s=7d671bd7a44948a1f6ec8264a89c0a39) Deploy the application now. The application will be deployed with a Cloudflare development domain and will not affect your production environment. ![Cloudflare Worker Step 3 - Deploy Application](https://mintcdn.com/profound-37face47/dU1U8PbY91PjiXyk/images/agent-analytics/cloudflare_worker/create-cloudflare-application-step3-1.png?fit=max\&auto=format\&n=dU1U8PbY91PjiXyk\&q=85\&s=96bd057ccbecc1d746170780e362b8b7) Cloudflare CLI will prompt you to login and select the account you want to deploy the application to. Please choose the account your domain is associated with. Cloudflare should automatically open a browser window with "Hello World" displayed. You can navigate to the project directory once the application is deployed. ```bash theme={null} cd log-collector ``` **2. Configure your Worker** Edit your `wrangler.json` file to configure the `PROFOUND_API_URL` environment variable and the route binding: > [!WARNING] > > Replace pattern `example.com/*` with your actual domain. Use your target site URL (usually marketing site). For example, if your marketing site is `https://www.example.com`, you should use `www.example.com/*` as the pattern. > The `zone_name` should be your canonical domain without the [www](http://www). > [!TIP] > > If you are not sure about the correct configuration, please contact [Profound support](mailto:support@tryprofound.com). ```json wrangler.json theme={null} { "$schema": "node_modules/wrangler/config-schema.json", "name": "log-collector", "main": "src/index.ts", "compatibility_date": "2025-01-29", "observability": { "enabled": true }, "route": { "pattern": "example.com/*", "zone_name": "example.com" }, "vars": { "PROFOUND_API_URL": "https://artemis.api.tryprofound.com/v1/logs/cloudflare_worker" } } ``` Then copy the TypeScript code into `src/index.ts`: ```typescript src/index.ts theme={null} /** * Cloudflare Worker for Log Collection * * Forwards request metadata to Profound's log collection API. The origin * response body is never read or modified, and every error in the logging * path is swallowed, so logging cannot alter the response. Failures are * logged with enough detail to tell a rejected request apart from a * timeout or a connection error. */ export interface Env { PROFOUND_API_URL: string; PROFOUND_LOG_INGESTION_TOKEN: string; } // Paths that are not logged. Matched on full path segments, so '/cart' does // not match '/cartography'. const EXCLUDED_PATHS = ['/checkout', '/cart', '/admin', '/api']; // Characters kept from a rejected response body when logging the failure. const DETAIL_LIMIT = 512; // Percent-decoded and lowercased so encoded variants such as '/%63heckout' // and '/checkout%2Fpayment' match the same way the origin routes them. function normalizePath(pathname: string): string { try { return decodeURIComponent(pathname).toLowerCase(); } catch { return pathname.toLowerCase(); } } function isExcluded(pathname: string): boolean { const path = normalizePath(pathname); return EXCLUDED_PATHS.some( (excluded) => path === excluded || path.startsWith(`${excluded}/`), ); } export default { async fetch(request: Request, env: Env, ctx: ExecutionContext): Promise { const response = await fetch(request); const skip = response.status === 101 || isExcluded(new URL(request.url).pathname); if (!skip) { ctx.waitUntil( sendLog(request, response, env).catch((error: unknown) => console.error( 'Failed to send logs:', error instanceof Error ? `${error.name}: ${error.message}` : error, ), ), ); } return response; }, } satisfies ExportedHandler; async function sendLog(request: Request, response: Response, env: Env) { const requestUrl = new URL(request.url); // +2 for ': ' and +2 for '\r\n' per header const headerSize = Array.from(response.headers.entries()).reduce( (total, [key, value]) => total + key.length + value.length + 4, 0, ); // Derived from content-length so the body is never buffered. Streamed or // chunked responses have no content-length and are reported as headers only. // HEAD and bodyless statuses advertise a content-length that is never sent, // so their body size is counted as zero. const contentLength = Number(response.headers.get('content-length')); const transmitsBody = request.method !== 'HEAD' && response.status !== 204 && response.status !== 304; const bodySize = transmitsBody && Number.isFinite(contentLength) ? contentLength : 0; const bytes = headerSize + bodySize; const logData = { timestamp: Date.now(), host: requestUrl.hostname, method: request.method, pathname: requestUrl.pathname, query_params: Object.fromEntries(requestUrl.searchParams), ip: request.headers.get('cf-connecting-ip'), userAgent: request.headers.get('user-agent'), referer: request.headers.get('referer'), bytes, status: response.status, }; const logResponse = await fetch(env.PROFOUND_API_URL, { method: 'POST', headers: { 'Content-Type': 'application/json', 'X-API-Key': env.PROFOUND_LOG_INGESTION_TOKEN, }, body: JSON.stringify([logData]), signal: AbortSignal.timeout(5000), }); // Only the first chunk of a rejected response is read, and only up to // DETAIL_LIMIT characters of it are kept, so a misconfigured URL that // returns a large body can never fill the isolate. The origin response // is still never read. if (!logResponse.ok) { const reader = logResponse.body?.getReader(); const chunk = await reader?.read(); await reader?.cancel(); const detail = chunk?.value ? new TextDecoder().decode(chunk.value).slice(0, DETAIL_LIMIT) : ''; console.error(`Log ingestion rejected the request: ${logResponse.status} ${detail}`); return; } await logResponse.body?.cancel(); } ``` > [!NOTE] > > The Worker logs two distinct failures. `Log ingestion rejected the request: ` means Profound received the request and refused it. This is usually an authentication or payload problem, and the status and body identify which. `Failed to send logs: : ` means the request never completed. `TimeoutError` is the five-second timeout. Other names point to a connection or configuration problem. Both messages go to the Worker's logs. You can read them under Workers & Pages > your Worker > Logs. > [!NOTE] > > `bytes` is derived from the `content-length` response header instead of the response body. Reading the body (for example via `response.clone()` and `blob()`) forces Cloudflare to buffer the whole payload in the Worker isolate, which fails with a 5xx on large or streamed responses. This Worker never reads or modifies the response body. It streams the origin response through unchanged, but it is still in the request path, so origin fetch failures surface as they would without it. `bytes` therefore counts headers plus `content-length`, and only when the response actually transmits a body (not `HEAD`, `204`, or `304`). **3. Deploy your Worker** ### Log in to Cloudflare Use the Wrangler CLI to deploy the Worker: ```bash theme={null} # Login to Cloudflare npx wrangler login ``` ### Configure the Profound Log Ingestion Token Secrets is a feature of Cloudflare Workers that allows you to store sensitive information like Log Ingestion Tokens in a secure environment. ```bash theme={null} # Configure the Log Ingestion Token secret npx wrangler secret put PROFOUND_LOG_INGESTION_TOKEN ``` You will be prompted to enter the Log Ingestion Token. Copy and paste the token and press enter. ![Configure Log Ingestion Token](https://mintcdn.com/profound-37face47/dU1U8PbY91PjiXyk/images/agent-analytics/cloudflare_worker/configure-api-key.png?fit=max\&auto=format\&n=dU1U8PbY91PjiXyk\&q=85\&s=7ea6fb5162663140e753640037802093) ### Deploy the Worker ```bash theme={null} # Deploy the Worker npx wrangler deploy ``` **4. Test your implementation** Verify your Worker is functioning correctly: Navigate to **Agent Analytics** in Profound and check that logs appear in the **Logs** panel. The AI log filter is on by default. Disable it using the filter in the top of the **Logs** panel. If logs appear, you are all set. You should see data populate in the Analytics dashboard. ## Troubleshooting * If logs aren't appearing, verify your `PROFOUND_API_URL` environment variable and `PROFOUND_LOG_INGESTION_TOKEN` secret are configured correctly * `Log ingestion rejected the request: 401` or `403` in the Worker logs: the `PROFOUND_LOG_INGESTION_TOKEN` secret is missing, misspelled, or not the token issued for this site. Set it again with `npx wrangler secret put PROFOUND_LOG_INGESTION_TOKEN` * `Failed to send logs: TimeoutError`: the log request passed the five-second timeout. A small number of these is expected and costs you only the affected log lines, since the timeout keeps the logging call away from your visitors. A sustained rate is worth reporting to [Profound support](mailto:support@tryprofound.com) with a few `requestId` values from the Worker logs * `Failed to send logs:` with any other error name: check `PROFOUND_API_URL` against the value in the configuration step above. A URL that resolves to a hostname on your own Cloudflare zone makes the Worker call itself, which fails on every request * Check Cloudflare Workers > Analytics for any execution errors * Ensure your route pattern matches your domain configuration * Verify the Worker is receiving requests by checking the Cloudflare dashboard metrics * Intermittent 5xx after deploying the Worker: check Metrics > Errors > Invocation Statuses for `Exceeded Memory` (Error 1102) or `Script threw exception` (Error 1101). Both mean the Worker itself is failing, not your origin. Confirm you are running the code above (no `clone()`, no body reads) and that the logging call is wrapped in `ctx.waitUntil()` with a `.catch()` * Google Ads / Merchant Center disapprovals such as "destination not working" or "image not accessible" after deploying the Worker: these come from `AdsBot-Google` or the Merchant Center fetcher receiving one of the Worker errors above. Fix the Worker errors, then request a re-review * To rule the Worker out entirely, remove the route binding (`npx wrangler triggers delete` or delete the route in the dashboard) and confirm the errors stop ## Additional resources * [Cloudflare Workers Documentation](https://developers.cloudflare.com/workers/) * [Wrangler CLI Documentation](https://developers.cloudflare.com/workers/wrangler/) * Contact [support@tryprofound.com](mailto:support@tryprofound.com) for API-related questions ## Security considerations * Store Log Ingestion Tokens as secrets in production environments * Regularly rotate Log Ingestion Tokens * Monitor Worker usage and logs for unusual patterns # Amazon CloudFront Source: https://docs.tryprofound.com/agent-analytics/cloudfront-s3 Deliver CloudFront access logs to Profound through Amazon S3. ## Overview Send CloudFront access logs to your assigned Profound S3 destination to see agent traffic in Agent Analytics. This guide uses standard logging (v2), cross-account delivery, and SSE-S3 encryption. > [!NOTE] > > Contact [Profound support](mailto:support@tryprofound.com) with your distribution ARN to receive your destination settings and delivery source name. For the Firehose integration, see [CloudFront through Amazon Data Firehose](/agent-analytics/aws_firehose_cloudfront). ## Prerequisites * Access to the AWS account that owns your CloudFront distribution. * Permission to configure CloudFront standard logging and CloudWatch Logs delivery resources. * An AWS CLI version that supports `aws logs put-delivery-source` and `aws logs create-delivery`, authenticated to that account. * Your CloudFront distribution ARN. ## Encryption This guide uses **SSE-S3 (AES256)** to encrypt your logs at rest with keys managed by Amazon S3. Profound configures encryption on your destination. ## Configuration **1. Get your destination settings** Open your distribution in the CloudFront console and copy its ARN. Send it to Profound support. It identifies both your distribution and its AWS account: ```text theme={null} arn:aws:cloudfront:::distribution/ ``` Profound prepares the source record, S3 destination, and cross-account permissions. You will receive: | Setting | Purpose | | - | - | | Bucket and prefix | Where Profound receives this source's logs | | Bucket region | `us-west-2` (US West, Oregon) | | Delivery source name | The exact name to use in your AWS account | | Delivery destination ARN | The Profound destination to connect to | | Output format | W3C, configured by Profound | The delivery destination ARN is a CloudWatch Logs resource ARN, not the S3 bucket ARN. Use all assigned values exactly as supplied. **2. Create the delivery source** Run this command in the AWS account that owns your distribution. Replace the placeholders with your assigned source name and distribution ARN: ```bash theme={null} aws logs put-delivery-source \ --region us-east-1 \ --name '' \ --resource-arn 'arn:aws:cloudfront:::distribution/' \ --log-type ACCESS_LOGS ``` > [!NOTE] > > Run CloudFront delivery commands in **`us-east-1`**, even though the destination bucket is in **`us-west-2`**. Use the source name supplied by Profound so it matches the configured delivery permissions. **3. Connect to the Profound destination** After Profound confirms the destination is ready, create the delivery in your AWS account: ```bash theme={null} aws logs create-delivery \ --region us-east-1 \ --delivery-source-name '' \ --delivery-destination-arn '' ``` Keep the returned delivery ID for troubleshooting. This creates a delivery; do not rerun it to check status. Profound manages the receiving bucket policy and delivery destination policy. You do not need to create a destination bucket or share AWS access keys with Profound. **4. Keep the expected log format** Keep the default standard-log field selection. Profound's destination uses **W3C** output: tab-separated records with a `#Fields` header in each file. The fields used for Agent Analytics include: | Fields | Used for | | - | - | | `date`, `time` | Request time | | `c-ip`, `x-forwarded-for` | Client address | | `x-host-header` | Requested domain | | `cs(Host)` | Distribution hostname fallback | | `cs-method`, `cs-uri-stem`, `cs-uri-query` | Requested resource | | `cs(User-Agent)`, `cs(Referer)` | Agent and referral analysis | | `sc-status`, `sc-bytes` | Response details | Preserve `x-host-header` to identify the domain requested by the visitor. Do not change this destination to JSON or Parquet, remove the header, or replace tabs with spaces. Keep the assigned destination path. Coordinate any changes to fields or file paths with Profound before applying them. **5. Confirm delivery** Open your distribution's **Logging** tab and confirm the S3 cross-account delivery appears. Generate traffic and allow time for logs to arrive. Ask Profound support to confirm receipt if you need to check the destination files. Access to your AWS account does not grant read access to Profound's bucket. ## Verify ingestion Open Agent Analytics for your domain and select a date range covering your test requests. Confirm that expected agent traffic appears after delivery and processing. If data is missing, provide support with the distribution ARN, delivery source name, delivery ID, request time, and any AWS error. Do not include credentials. ## Troubleshooting | Problem | What to check | | - | - | | CreateDelivery reports AccessDenied | Confirm your AWS permissions and ask Profound to check the destination policy for your account. | | AWS cannot find the source or destination | Use `us-east-1` and the exact supplied resource names and ARN. | | Delivery exists but no data appears | Confirm source readiness, generate new requests, and check the Agent Analytics date range. | | Records cannot be processed | Confirm W3C output, a `#Fields` header, tab-separated records, and the expected fields. | | Traffic appears under the distribution hostname | Check that `x-host-header` is included and contains the requested domain. | ## Additional Resources * [AWS: CloudFront standard logging (v2) and cross-account delivery](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/standard-logging.html) * [CloudFront through Amazon Data Firehose](/agent-analytics/aws_firehose_cloudfront) * [Contact Profound support](mailto:support@tryprofound.com) # Crawler Verification Source: https://docs.tryprofound.com/agent-analytics/crawler-verification How we verify AI and search engine crawlers ## Crawler Verification Process Understanding who's accessing your website is crucial for security and analytics accuracy. Profound Agent Analytics platform employs robust verification methods to ensure that crawlers claiming to be from major AI and search platforms are genuine. ## Why Verification Matters Accurate crawler identification is essential for: * Protecting your website from malicious actors * Ensuring data accuracy in your analytics * Managing resource allocation effectively * Maintaining security compliance * Optimizing content delivery for legitimate AI platforms ## Verification Methods ### Primary Verification Techniques Our platform employs multiple verification methods to ensure accuracy: 1. **Reverse DNS Lookup** * Verifies the crawler's hostname matches the claimed organization * Provides an additional layer of authenticity checking * Used by established platforms like Google and Apple 2. **IP Range Validation** * Confirms the crawler originates from the organization's known IP ranges * Particularly effective for platforms like OpenAI and You.com * Updated regularly to maintain accuracy 3. **Heuristic Detection** * Analyzes crawler behavior patterns * Identifies characteristic signatures * Helps verify crawlers without published verification methods ## Platform-Specific Verification ### Fully Verified Platforms * [**Google**](https://developers.google.com/crawling/docs/crawlers-fetchers/google-common-crawlers) * Google-CloudVertexBot: Reverse DNS verification * Googlebot: Reverse DNS verification + ASN verification * Google-Extended: Reverse DNS verification * Storebot-Google: Reverse DNS verification * Googlebot-News: Reverse DNS verification * Googlebot-Video: Reverse DNS verification * Googlebot-Image: Reverse DNS verification * Google-NotebookLM: ASN verification * Google-Agent: Reverse DNS verification + IP range verification + ASN verification * GoogleAgent-Mariner: IP range verification * Google-Other: Heuristic detection only * [**Microsoft Bing**](https://www.bing.com/webmasters/help/which-crawlers-does-bing-use-8c184ec0) * BingBot: Reverse DNS verification * MicrosoftPreview: Reverse DNS verification * [**Apple**](https://support.apple.com/en-us/119829) * Applebot: Reverse DNS verification + IP range verification * Applebot-Extended: Reverse DNS verification + IP range verification * [**OpenAI**](https://platform.openai.com/docs/bots) * OAI-SearchBot: IP range verification + ASN verification * ChatGPT-User: IP range verification + ASN verification * GPTBot: IP range verification + ASN verification * OAI-Operator: ASN verification * [**Duck Duck Go**](https://duckduckgo.com/duckduckgo-help-pages/results/duckduckbot) * DuckDuckBot: IP range verification * DuckAssistBot: ASN verification * [**Perplexity**](https://docs.perplexity.ai/guides/bots) * PerplexityBot: IP range verification * Perplexity-User: IP range verification * [**Meta**](https://developers.facebook.com/docs/sharing/webmasters/web-crawlers/#identify-2) * Meta-ExternalAgent: ASN verification * Meta-ExternalFetcher: ASN verification * Meta-WebIndexer: ASN verification * FacebookBot: Heuristic detection only * [**Amazon**](https://developer.amazon.com/amazonbot) * AmazonBot: Reverse DNS verification + IP range verification * Amazon-SearchBot: IP range verification * Amazon-User: IP range verification * AmazonBuyForMe: ASN verification ### Partially Verified Platforms Some platforms use common cloud provider IPs or don't publish verification methods, making complete verification challenging: * [**Anthropic**](https://privacy.claude.com/en/articles/8896518-does-anthropic-crawl-data-from-the-web-and-how-can-site-owners-block-the-crawler) * ClaudeBot: ASN + Heuristic detection * Claude-User: ASN + Heuristic detection * Claude-SearchBot: ASN + Heuristic detection * **You.com** * YouBot: Reverse DNS verification + IP range verification * **Bytedance** * Bytespider: Reverse DNS verification * TikTokSpider: Heuristic detection only * [**Common Crawl**](https://commoncrawl.org/ccbot) * CCBot: IP range verification * **Yahoo** * Slurp: Reverse DNS verification * **OpenClaw** * OpenClaw: Heuristic detection only * **DeepSeek** * DeepSeek: Reverse DNS verification * **Baidu** * BaiduSpider: Reverse DNS verification * **Huawei** * PetalBot: ASN verification * [**Mistral**](https://docs.mistral.ai/robots) * MistralAI-User: IP range verification * **Yandex** * YandexBot: IP range verification * **Gemini** * Google: Heuristic detection * Gemini-Deep-Research: Reverse DNS verification + ASN verification ## Stay Updated Our platform continuously updates verification methods as: * New AI platforms emerge * Existing platforms modify their crawler infrastructure * Additional verification methods become available * Security requirements evolve ## Important Note About Data Updates We continuously monitor and improve our verification processes as the AI crawler landscape evolves. As we enhance our detection methods and crawler identification techniques, you may notice changes in your historical and current analytics data. These updates reflect our commitment to providing the most accurate and reliable crawler identification possible. If you observe any significant changes in your data, it's likely due to improvements in our verification system. We recommend regularly reviewing your analytics dashboard to stay informed about the latest insights into AI crawler behavior on your site. # Custom Log Integration Source: https://docs.tryprofound.com/agent-analytics/custom This documentation explains how to send your application logs directly to Profound's analytics platform using our Custom Log Integration API. ## Overview The Custom Log Integration allows you to send your application logs directly to Profound's analytics platform using a standardized JSON format. This integration supports batch processing of logs and includes robust validation to ensure data quality while providing detailed feedback on any validation issues. ## Prerequisites * Your Profound Log Ingestion Token * The ability to send HTTP POST requests from your application/infrastructure ## API Specification ### Endpoint ```http theme={null} POST https://artemis.api.tryprofound.com/v1/logs/custom ``` ### Authentication Include your Profound Log Ingestion Token in the request header: ```http theme={null} 'x-api-key': 'bot_PROFOUND_LOG_INGESTION_TOKEN' ``` ### Request Format Logs must be sent as an array of JSON objects. Each log entry requires specific fields: #### Required Fields * `timestamp` - Event timestamp (Unix timestamp or ISO 8601 string) * `method` - HTTP method (max 10 characters) * `host` - Request hostname (max 255 characters) * `path` - Request path (max 2048 characters) * `status_code` - HTTP status code (range: 100-599) * `ip` - Client IP address (max 45 characters) * `user_agent` - User agent string (max 1024 characters) #### Optional Fields > [!WARNING] > > Both `query_params` and `referer` are optional. However, if you do not provide either, human referral data will **not be available** in your dashboard. * `query_params` - Query parameters (key max: 100 chars, value max: 1000 chars) * `referer` - Request referer (max 2048 characters) * `bytes_sent` - Response size in bytes (must be >= 0) * `duration_ms` - Request duration in milliseconds (must be >= 0) > [!TIP] > > Each request can contain up to 1,000 log entries. For larger datasets, split your logs into multiple requests. ## Implementation Guide ![Custom Detected](https://mintcdn.com/profound-37face47/cWnNS0qcU3zRxQWi/images/custom_setup.png?fit=max\&auto=format\&n=cWnNS0qcU3zRxQWi\&q=85\&s=5dfad431ec225ef0cd700f3ffc201494) **1. Format Your Logs** Prepare your log data in the required JSON format: ```json theme={null} [ { "timestamp": "2024-01-11T12:00:00Z", "method": "GET", "host": "example.com", "path": "/products", "status_code": 200, "ip": "192.168.1.1", "user_agent": "Mozilla/5.0...", "query_params": { "category": "electronics", "page": "1" }, "referer": "https://example.com", "bytes_sent": 1024, "duration_ms": 150 } ] ``` **2. Send the Request** Here's how to send logs using popular programming languages: Python: ```python theme={null} import requests import json logs = [{ "timestamp": "2024-01-11T12:00:00Z", "method": "GET", "host": "example.com", "path": "/products", "status_code": 200, "ip": "192.168.1.1", "user_agent": "Mozilla/5.0..." }] response = requests.post( "https://artemis.api.tryprofound.com/v1/logs/custom", headers={ "x-api-key": "bot_PROFOUND_LOG_INGESTION_TOKEN", "Content-Type": "application/json" }, json=logs ) print(response.json()) ``` Node.js: ```javascript theme={null} const axios = require('axios'); const logs = [{ timestamp: "2024-01-11T12:00:00Z", method: "GET", host: "example.com", path: "/products", status_code: 200, ip: "192.168.1.1", user_agent: "Mozilla/5.0..." }]; axios.post('https://artemis.api.tryprofound.com/v1/logs/custom', logs, { headers: { 'x-api-key': 'bot_PROFOUND_LOG_INGESTION_TOKEN', 'Content-Type': 'application/json' } }) .then(response => console.log(response.data)) .catch(error => console.error(error)); ``` **3. Handle the Response** Process the API response to confirm successful ingestion or handle any errors: Successful Response: ```json theme={null} { "status": "accepted", "message": "Processing X log entries", "first_visit_id": "uuid-string", "errors": [] } ``` Response with Validation Errors: ```json theme={null} { "status": "accepted", "message": "Processing 98 log entries", "first_visit_id": "uuid-string", "errors": [ "Invalid log format: timestamp out of reasonable range", "Invalid log format: status_code must be between 100 and 599" ] } ``` ## Error Handling The API handles errors in two ways: ### Validation Errors For expected validation issues (invalid timestamps, malformed data, etc.), the API will: * Continue processing valid entries in the batch * Add validation errors to the `errors` array in the response * Return a 200 status code with processed entries and errors ### Unexpected Errors For unexpected errors (server issues, database problems, etc.), the API will: * Return a 500 status code * Return an error message in the response detail field * Not process any entries in the batch ## Best Practices * Group logs into batches of up to 1,000 entries * Implement retry logic for failed requests * Use background processing for log submission * Send logs asynchronously to avoid impact on application performance * Consider implementing local buffering * Use compression for large payloads ## Support * Contact [support@tryprofound.com](mailto:support@tryprofound.com) for assistance ## Security Considerations * Store Log Ingestion Tokens securely * Regularly rotate Log Ingestion Tokens * Monitor request logs for unusual patterns * Use HTTPS for all API requests *** # Adobe Analytics Extension Source: https://docs.tryprofound.com/agent-analytics/extensions/adobe-analytics Connect Adobe Analytics with Profound Agent Analytics to correlate AI-referred traffic with human engagement, orders, and revenue ## Overview Profound Agent Analytics now offers seamless integration with Adobe Analytics, enhancing your ability to correlate AI interactions with human engagement and business outcomes. This integration bridges the gap between AI visibility and traditional web analytics, providing a comprehensive view of your digital performance ecosystem. By connecting your Adobe Analytics report suite, Agent Analytics can import critical engagement and revenue metrics alongside our specialized AI tracking capabilities. This integration works both as a complementary extension to our core platform or as a standalone solution, giving you flexibility in how you monitor and optimize your digital presence for both human and AI visitors. The Adobe Analytics integration automatically synchronizes your analytics data in real-time when accessing the Adobe Analytics dashboard, allowing you to make data-driven decisions with the most current information available while maintaining strict privacy controls. ### Adobe Analytics Metrics The following metrics are retrieved from the [Adobe Analytics Reporting API](https://developer.adobe.com/analytics-apis/docs/2.0/guides/endpoints/reports/): * **Referrer** (`referrer`): The referring source of the visit, used to identify traffic originating from AI systems * **Visits** (`visits`): The number of human sessions referred by AI platforms * **Orders** (`orders`): Completed purchase events from AI-referred traffic * **Revenue** (`revenue`): Total monetary value generated from AI-referred visits ### Dashboard Once connected, the Adobe Analytics tab in your Profound dashboard provides a unified view of how AI-referred traffic converts on your website. #### Summary Metrics At the top of the dashboard, you'll see high-level metrics for your selected date range: * **Humans visited from AI systems**: The total number of human visitors who arrived at your site after being referred by AI assistants * **Revenue from AI systems**: The total revenue attributed to AI-referred traffic Both metrics include period-over-period comparison to help you track trends. #### Platforms The Platforms table breaks down AI-referred traffic by the AI system that sent the visit. Each platform row includes: * **Visits**: Number of human visits referred by the platform * **Orders**: Completed purchase events from those visits * **Revenue**: Total revenue generated from AI-referred visitors * **Conversion Rate**: Percentage of visits that resulted in an order #### Human Visits by Page The page-level breakdown shows which pages humans visit most after being referred by AI assistants. Each row includes: * **Visits**: Number of AI-referred visits to the page * **Orders**: Purchase events that occurred on or through the page * **Revenue**: Revenue attributed to the page ## Prerequisites * Adobe Analytics account * Adobe Analytics configured for your website * Access to a target Report Suite via your Adobe account ## Configuration within Adobe Admin Console **1. Step 1** Go to the [Adobe Admin Console](https://adminconsole.adobe.com/) and select your Adobe Analytics product. ![Adobe Admin Console](https://mintcdn.com/profound-37face47/pZin5bi5tFO0ur3R/images/agent-analytics/extensions/within_adobe_admin_console.png?fit=max\&auto=format\&n=pZin5bi5tFO0ur3R\&q=85\&s=8f7dfcf5b3e2451d788753958ed4a816) **2. Step 2** In the **Product Profiles** section, create a new profile for Profound's Agent Analytics Integration using the **New Profile** button. You'll be prompted to give it a name and optionally a description. ![New Profile](https://mintcdn.com/profound-37face47/pZin5bi5tFO0ur3R/images/agent-analytics/extensions/within_adobe_new_profile.png?fit=max\&auto=format\&n=pZin5bi5tFO0ur3R\&q=85\&s=e4ba6f14aae851f53de34cee44407b6e) **3. Step 3** Click into the new product profile and navigate to the **Permissions** tab. ![Product Profile Permissions](https://mintcdn.com/profound-37face47/pZin5bi5tFO0ur3R/images/agent-analytics/extensions/within_adobe_product_profile.png?fit=max\&auto=format\&n=pZin5bi5tFO0ur3R\&q=85\&s=5608216ab8251f514552740b92b12f14) **4. Step 4** Click on the edit icon within the **Report Suites** row. ![Edit Icon](https://mintcdn.com/profound-37face47/pZin5bi5tFO0ur3R/images/agent-analytics/extensions/within_adobe_edit_icon.png?fit=max\&auto=format\&n=pZin5bi5tFO0ur3R\&q=85\&s=dccbfaf4e5e3402df714c9c02a9c082f) **5. Step 5** For **Report Suites**, **Metrics**, and **Dimensions**, toggle on **Auto-include** for each one. ![Auto-include](https://mintcdn.com/profound-37face47/pZin5bi5tFO0ur3R/images/agent-analytics/extensions/within_adobe_auto_include_on.png?fit=max\&auto=format\&n=pZin5bi5tFO0ur3R\&q=85\&s=b73db93438130776b2ee37fe7005e1cf) **6. Step 6** Within the **Report Suite Tools** tab, add the **Report Suite Mgmt** permission. ![Report Suite Tools](https://mintcdn.com/profound-37face47/pZin5bi5tFO0ur3R/images/agent-analytics/extensions/within_adobe_report_suites_tools_addon.png?fit=max\&auto=format\&n=pZin5bi5tFO0ur3R\&q=85\&s=c960519ed5319a35873798a3dc963672) **7. Step 7** Within the **Analytics Tools** tab, add the **Web Services** and **Web Service Access** permissions. ![Analytics Tools Permissions](https://mintcdn.com/profound-37face47/pZin5bi5tFO0ur3R/images/agent-analytics/extensions/wihtin_adobe_analytics_tools_perms.png?fit=max\&auto=format\&n=pZin5bi5tFO0ur3R\&q=85\&s=3fef9b3b8f6c11a52ef3c616b5160ca1) **8. Step 8** Click **Save**. ## Configuration within Adobe Developer Console **1. Step 1** Navigate to the [Adobe Developer Console](https://developer.adobe.com/) and click **Create new project**. Make sure you are creating the project under the same organization that the product profile was created under in the Admin Console. ![Create New Project](https://mintcdn.com/profound-37face47/pZin5bi5tFO0ur3R/images/agent-analytics/extensions/adobe_dev_create_new_project.png?fit=max\&auto=format\&n=pZin5bi5tFO0ur3R\&q=85\&s=cd911c9b5b99de8179e79640de389476) **2. Step 2** Select **Add API**. ![Add API](https://mintcdn.com/profound-37face47/pZin5bi5tFO0ur3R/images/agent-analytics/extensions/adobe_dev_add_api.png?fit=max\&auto=format\&n=pZin5bi5tFO0ur3R\&q=85\&s=ba6e14417b0c88071f33127ca30a9c91) **3. Step 3** Select **Adobe Analytics**. ![Select Adobe Analytics](https://mintcdn.com/profound-37face47/pZin5bi5tFO0ur3R/images/agent-analytics/extensions/adobe_dev_add_adove_analytics.png?fit=max\&auto=format\&n=pZin5bi5tFO0ur3R\&q=85\&s=0ffaeee7bb6070479b70bec43d4e970e) **4. Step 4** Select **Server-to-Server Authentication** and click **Next**. After clicking next, input what you'd like to name the credential (for example, Profound Agent Analytics) and then click **Next** again. ![Server-to-Server Authentication](https://mintcdn.com/profound-37face47/pZin5bi5tFO0ur3R/images/agent-analytics/extensions/adobe_dev_s2s.png?fit=max\&auto=format\&n=pZin5bi5tFO0ur3R\&q=85\&s=9cbea7e4ca1a57e01e758556982939b6) **5. Step 5** From the **Product Profile** list, select the product profile that was created in the Admin Console in the previous steps. Then click **Save configured API** on the bottom right. ![Select Product Profile](https://mintcdn.com/profound-37face47/pZin5bi5tFO0ur3R/images/agent-analytics/extensions/adobe_dev_product_profile_select.png?fit=max\&auto=format\&n=pZin5bi5tFO0ur3R\&q=85\&s=d679ec8b6a7e19354304a3f3a3b3ab16) **6. Step 6** In the newly created project, navigate to the **OAuth Server-to-Server** tab and retrieve the **Client ID**, **Client Secret**, and **Organization ID**. These values will be necessary when connecting the project within Profound. ![OAuth Credentials](https://mintcdn.com/profound-37face47/pZin5bi5tFO0ur3R/images/agent-analytics/extensions/adobe_dev_creds.png?fit=max\&auto=format\&n=pZin5bi5tFO0ur3R\&q=85\&s=36c3180711b99618ead0b5b8d7d09794) ## Configuration within Profound **Agent Analytics + Adobe Analytics** Learn how to integrate Adobe Analytics with your existing Agent Analytics configuration. **1. Step 1** Navigate to the **Adobe Analytics** tab. Here you will find a button to **Connect account**. ![Adobe Analytics Tab](https://mintcdn.com/profound-37face47/XgLNXwd99BklcUAl/images/agent-analytics/extensions/adobe_analytics_tab.png?fit=max\&auto=format\&n=XgLNXwd99BklcUAl\&q=85\&s=af26d46a12795bbe38b69364ac4cd472) **2. Step 2** Click **Connect account**. ![Set up Adobe Analytics](https://mintcdn.com/profound-37face47/XgLNXwd99BklcUAl/images/agent-analytics/extensions/adobe_analytics_setup.png?fit=max\&auto=format\&n=XgLNXwd99BklcUAl\&q=85\&s=4efec5292fb490eda425b8b236588f63) **3. Step 3** Input the **Client Secret**, **Client ID**, and **Organization ID** retrieved from the Adobe Developer Console from the previous steps. ![Credentials Input](https://mintcdn.com/profound-37face47/XgLNXwd99BklcUAl/images/agent-analytics/extensions/profound_credentials_inputs.png?fit=max\&auto=format\&n=XgLNXwd99BklcUAl\&q=85\&s=c84f29c22c7f832e08524d0b9d0458b9) **4. Step 4** Once your Adobe account is connected, choose your Report Suite. Select a report suite to connect to this domain from the dropdown. ![Choose Report Suite](https://mintcdn.com/profound-37face47/XgLNXwd99BklcUAl/images/agent-analytics/extensions/adobe_analytics_report_suite.png?fit=max\&auto=format\&n=XgLNXwd99BklcUAl\&q=85\&s=e0246611f73ff39c11d3238b9af0351f) **5. Step 5** Click **Complete setup** to finalize the connection. ![Complete Setup](https://mintcdn.com/profound-37face47/XgLNXwd99BklcUAl/images/agent-analytics/extensions/adobe_analytics_complete_setup.png?fit=max\&auto=format\&n=XgLNXwd99BklcUAl\&q=85\&s=4a47a5c46d77cbc1c96cd3fea91f5007) > [!TIP] > > That's it! Adobe Analytics is now connected. Reload your Adobe Analytics tab to see data from your selected report suite. **Adobe Analytics Alone** Learn how to integrate Adobe Analytics without Agent Analytics **1. Step 1** Navigate to the **Adobe Analytics Setup** tab. Here you will find a button to **Connect account**. ![Adobe Analytics Tab](https://mintcdn.com/profound-37face47/XgLNXwd99BklcUAl/images/agent-analytics/extensions/adobe_analytics_setup_alone.png?fit=max\&auto=format\&n=XgLNXwd99BklcUAl\&q=85\&s=a7e87461009e5ae25ab7f9792704e79a) **2. Step 2** Click **Connect account**. ![Set up Adobe Analytics](https://mintcdn.com/profound-37face47/XgLNXwd99BklcUAl/images/agent-analytics/extensions/adobe_analytics_setup_alone.png?fit=max\&auto=format\&n=XgLNXwd99BklcUAl\&q=85\&s=a7e87461009e5ae25ab7f9792704e79a) **3. Step 3** Input the **Client Secret**, **Client ID**, and **Organization ID** retrieved from the Adobe Developer Console from the previous steps. ![Credentials Input](https://mintcdn.com/profound-37face47/XgLNXwd99BklcUAl/images/agent-analytics/extensions/profound_credentials_inputs.png?fit=max\&auto=format\&n=XgLNXwd99BklcUAl\&q=85\&s=c84f29c22c7f832e08524d0b9d0458b9) **4. Step 4** Once your Adobe account is connected, choose your Report Suite. Select a report suite to connect to this domain from the dropdown. ![Choose Report Suite](https://mintcdn.com/profound-37face47/XgLNXwd99BklcUAl/images/agent-analytics/extensions/adobe_analytics_report_suite.png?fit=max\&auto=format\&n=XgLNXwd99BklcUAl\&q=85\&s=e0246611f73ff39c11d3238b9af0351f) **5. Step 5** Click **Complete setup** to finalize the connection. ![Complete Setup](https://mintcdn.com/profound-37face47/XgLNXwd99BklcUAl/images/agent-analytics/extensions/adobe_analytics_complete_setup.png?fit=max\&auto=format\&n=XgLNXwd99BklcUAl\&q=85\&s=4a47a5c46d77cbc1c96cd3fea91f5007) > [!TIP] > > That's it! Adobe Analytics is now connected. Reload your Adobe Analytics tab to see revenue data from your selected report suite. ## Disconnecting You can disconnect the Adobe Analytics integration at any time in the Settings tab. Your integration will be disabled immediately. ## Security and Privacy > [!NOTE] > > Profound requests READ ONLY access to your Adobe Analytics data and does not download, save, or otherwise retain your Adobe Analytics data. Your data is fetched on demand for processing and display purposes only. We persist minimal report suite information (ID, name, and association with your selected website) to maintain the connection until you choose to disconnect the Adobe Analytics integration. You can opt out at any time through the Settings tab, giving you complete control over your analytics data. ## Considerations * Only one report suite can be connected per website at this time * Only one member of your organization must complete the Adobe authentication process. They must have access to the target Adobe Analytics account and report suites. * Adobe Analytics can be blocked by various browsers or browser extensions. For best results, we recommend using Adobe Analytics in conjunction with the Agent Analytics platform ## Additional Resources * [Adobe Analytics API Documentation](https://developer.adobe.com/analytics-apis/docs/2.0/) * [Adobe Exchange Listing](https://exchange.adobe.com/apps/ec/600242/adobe-analytics-profound-agent-analytics-integration) * Contact [support@tryprofound.com](mailto:support@tryprofound.com) for API-related questions # Google Analytics (GA4) Extension Source: https://docs.tryprofound.com/agent-analytics/extensions/google-analytics Connect AI visibility with human engagement metrics to create a complete picture of your digital performance and revenue impact ## Overview Profound Agent Analytics now offers seamless integration with Google Analytics 4 (GA4), enhancing your ability to correlate AI interactions with human engagement and business outcomes. This integration bridges the gap between AI visibility and traditional web analytics, providing a comprehensive view of your digital performance ecosystem. By connecting your GA4 property, Agent Analytics can import critical conversion and revenue metrics alongside our specialized AI tracking capabilities. This integration works both as a complementary extension to our core platform or as a standalone solution, giving you flexibility in how you monitor and optimize your digital presence for both human and AI visitors. The GA4 integration automatically synchronizes your analytics data in real-time when accessing the Google Analytics dashboard, allowing you to make data-driven decisions with the most current information available while maintaining strict privacy controls. ### GA4 Metrics * Sessions (`sessions`): Track human visitor engagement based on GA4 session data * Transactions (`transactions`): Monitor purchase-related events including completed sales and refunds * Purchase Revenue (`purchaseRevenue`): Quantify the financial impact of your digital presence * Session Key Event Rate (`sessionKeyEventRate`): Evaluate conversion efficiency through the percentage of sessions resulting in transactions * Page Path Analysis (`pagePath`): Identify your most valuable content for both humans and AI systems ## Prerequisites * Google Analytics account * Google Analytics configured for your website * Access to a target Property via your Google account ## Configuration **Agent Analytics + GA4** Learn how to integrate GA4 with your existing Agent Analytics Configuration. **1. Step 1** Navigate to the Google Analytics tab. Here you will find a button to Connect Google Analytics. ![Google Analytics Tab](https://mintcdn.com/profound-37face47/tg0qbLRw_vFMInTl/images/agent-analytics/extensions/google_analytics_tab.png?fit=max\&auto=format\&n=tg0qbLRw_vFMInTl\&q=85\&s=c7064407885861b97f929e4c0e294aac) **2. Step 2** Click **Configure Google Analytics**. This will direct you to connect your Google account to Profound. When prompted, *you should select the Google account which has access to the GA4 Project you want to integrate.* ![Connect Google Account](https://mintcdn.com/profound-37face47/dU1U8PbY91PjiXyk/images/agent-analytics/extensions/connect_google.png?fit=max\&auto=format\&n=dU1U8PbY91PjiXyk\&q=85\&s=ec7225779e5cf28187e5703f6f732308) ![Google OAuth](https://mintcdn.com/profound-37face47/tg0qbLRw_vFMInTl/images/agent-analytics/extensions/google_oauth.png?fit=max\&auto=format\&n=tg0qbLRw_vFMInTl\&q=85\&s=9d98364e79234d16cc4443b0617c192b) **3. Step 3** Select the website you want to connect. This will determine which domain displays GA4 data. Then, select the GA4 property to retrieve data from. ![Select Website and Property](https://mintcdn.com/profound-37face47/tg0qbLRw_vFMInTl/images/agent-analytics/extensions/property_website_selection.png?fit=max\&auto=format\&n=tg0qbLRw_vFMInTl\&q=85\&s=a0765bd872511f27a2b6c3aa71f4c187) **Step 4** Profound will now verify the connection. ![Configured](https://mintcdn.com/profound-37face47/dU1U8PbY91PjiXyk/images/agent-analytics/extensions/configured.png?fit=max\&auto=format\&n=dU1U8PbY91PjiXyk\&q=85\&s=2cd3fda73d5efd49ae2c9c9c1c86c536) > [!TIP] > > That's it! Google Analytics is now connected. Reload your Google Analytics tab to see revenue data from your selected property. **GA4 Alone** Learn how to integrate GA4 without Agent Analytics **1. Step 1** Navigate to Website tab in the sidebar. If you have not configured Agent Analytics, you will see the following window. ![Referrals Tab](https://mintcdn.com/profound-37face47/dU1U8PbY91PjiXyk/images/agent-analytics/extensions/ga4_only.png?fit=max\&auto=format\&n=dU1U8PbY91PjiXyk\&q=85\&s=24b6bcebd7ef0638f110fc5322a723dd) **2. Step 2** Click **Google Analytics** near the bottom. This will direct you to connect your Google account to Profound. When prompted, *you should select the Google account which has access to the GA4 Project you want to integrate.* ![Connect Google Account](https://mintcdn.com/profound-37face47/dU1U8PbY91PjiXyk/images/agent-analytics/extensions/connect_google.png?fit=max\&auto=format\&n=dU1U8PbY91PjiXyk\&q=85\&s=ec7225779e5cf28187e5703f6f732308) ![Google OAuth](https://mintcdn.com/profound-37face47/tg0qbLRw_vFMInTl/images/agent-analytics/extensions/google_oauth.png?fit=max\&auto=format\&n=tg0qbLRw_vFMInTl\&q=85\&s=9d98364e79234d16cc4443b0617c192b) **3. Step 3** Select **+ Add a new website** and enter your domain name. Use the domain for which your target GA4 property is configured. Then, select the GA4 property to retrieve data from. ![Add New Website](https://mintcdn.com/profound-37face47/dU1U8PbY91PjiXyk/images/agent-analytics/extensions/add_new_domain.png?fit=max\&auto=format\&n=dU1U8PbY91PjiXyk\&q=85\&s=57feefd90475e5d74ec6d97543255053) **Step 4** Profound will now verify the connection. ![Configured](https://mintcdn.com/profound-37face47/dU1U8PbY91PjiXyk/images/agent-analytics/extensions/configured.png?fit=max\&auto=format\&n=dU1U8PbY91PjiXyk\&q=85\&s=2cd3fda73d5efd49ae2c9c9c1c86c536) ## Disconnecting You can disconnect GA4 integration at any time in the Settings tab. Your integration will be disabled immediately. ![Disconnecting](https://mintcdn.com/profound-37face47/dU1U8PbY91PjiXyk/images/agent-analytics/extensions/disconnect_ga4.png?fit=max\&auto=format\&n=dU1U8PbY91PjiXyk\&q=85\&s=198c6f5053a1f10720024ad8aa6f106e) ## Security and Privacy > [!NOTE] > > Profound requests READ ONLY access to your Google Analytics data and does not download, save, or otherwise retain your Google Analytics data. Your data is fetched on demand for processing and display purposes only. We persist minimal property information (ID, name, and association with your selected website) to maintain the connection until you choose to disconnect the GA4 integration. You can opt out at any time through the Settings tab, giving you complete control over your analytics data. ## Considerations * Only one property can be connected per website at this time * Every team member must complete the Google authentication process. They must have access to the target GA4 project and property * Google Analytics is blocked by various browsers or browser extensions. For best results, we recommend using GA4 in conjunction with the Agent Analytics platform ## Additional Resources * [Google Analytics Data API](https://developers.google.com/analytics/devguides/reporting/data/v1/rest) * [Google Analytics Metric Information](https://developers.google.com/analytics/devguides/reporting/data/v1/api-schema) * Contact [support@tryprofound.com](mailto:support@tryprofound.com) for API-related questions # Frequently Asked Questions Source: https://docs.tryprofound.com/agent-analytics/faq ## Agent Analytics > **My site is hosted on Shopify / Squarespace / WP / Kinsta / Liquid / etc. How can I connect Agent Analytics?** > > Profound supports integrations with many providers. However, managed providers cannot be integrated at this time. > Managed providers like those above offer a streamlined experience that abstracts the technical requirements of setting up and hosting a website. > This abstraction makes setting up a website much easier, but consequently obfuscates the niche features necessary to integrate Agent Analytics. > > Generally, Profound requires a means to access your site's server logs to analyze traffic and surface insights about bot activity. In most cases, > managed providers simply do not offer such a mechanism. Without the ability to access your site's server logs, we cannot integrate with your site. > > If you are using a managed provider, please contact your provider to inquire about server logs. If you have some means of accessing your site's server logs, > we offer a custom endpoint where these can be sent. Please contact support to learn more. > **Do I need technical expertise and access to my site's code / CDN to configure Agent Analytics?** > > Yes, you will need to have access to your site's hosting platform and permissions to configure the CDN. > Profound provides comprehensive documentation for each supported platform, including step-by-step instructions and configuration examples. > However, we cannot edit your site's code or CDN configuration for you. Thus, it is necessary to have technical expertise and access to your site's code / CDN > to complete the integration. > **How do I know if Agent Analytics is working?** > > You can verify that the log collection is working by checking the **Logs** tab in **My Website**. After completing the onboarding process, > please allow a few minutes for data to begin populating. If there is no data after 24 hours, please contact support. > **I used the Cloudfront integration via Firehose. Why am I not seeing any data?** > > Cloudfront sometimes sends logs from a unique domain that differs from your site's domain. This is normal and expected, but means the > key tied to your real site's domain does not match the domain name coming from Cloudfront. Please contact support to alter the domain. > Data will begin appearing shortly after the domain is updated. > **I used the Cloudflare integration via Logpush. Why is there no HTTP destination option at Step 2 / no ClientRequestHost filter at step 4?** > > Cloudflare integrations need to be configured at the domain level. This can be accessed by signing into Cloudflare > select an account > > **Account Home** (on the left sidebar) > select your domain > complete the steps in the documentation. > **I registered two (or more) domains with Agent Analytics. I see one domain by default. How do I see the other domains?** > > The domain name at the top of the page is a dropdown menu. Click once to see a list of registered domains, then select the domain you want to view. ## Google Analytics > **What domain should I use when registering my site with Google Analytics?** > > The domain name to enter when registering via Google Analytics can be any label of your choosing. > If you are configuring only GA4, use whichever label makes sense to you. > If you are configuring both GA4 and Agent Analytics for the same site, use the site name you registered with Agent Analytics. > This will combine the data to see it all in one place. > **Why can't I click on the Overview / Bots / Pages / Logs tabs?** > > Google Analytics exposes fundamentally different data than the server logs coming from a CDN integration. > Using a CDN integration allows Profound to track traffic on your site at the most granular level. > GA4 does not have the same level of granularity in its data. We are able to track human sessions only, including identifying > a referral from AI platforms. > > Additionally, GA4 provides data that is not exposed in the server logs. Namely, we can see transaction and revenue data that is associated > with AI referred traffic. > **My team registered GA4 already. Why can't I see any data?** > > If someone on your team has registered a Google Analytics property linked to your Profound account, and you are not able to see any data, > please ensure you have registered your Google account as well. For security purposes, we do not share the access tokens from one account to another. > If your teammates are able to see data, they have valid Google tokens associated with their account. To see the data from your account, please ensure > you have authorized Profound to access your Google account. You can do this in **My Website** → **Settings** → **Connect Google Analytics** at the bottom of the page. > **I have configured both GA4 and Agent Analytics. Why am I seeing different data in the Referrals tab?** > > If you have just registered Agent Analytics via a CDN integration within the last week, Profound has not yet collected enough data to accurately > represent your site's traffic. Google Analytics will have historical data available immediately, but Agent Analytics will take some time to catch up. > > Additionally, regardless of sign up date, GA4 can be blocked by certain browsers or extensions. The Agent Analytics data cannot be blocked. Thus, your GA4 > data may be slightly different than the Agent Analytics data. # Fastly HTTPS Endpoint Source: https://docs.tryprofound.com/agent-analytics/fastly This documentation explains how to set up Fastly real-time logs delivery to Profound Agent Analytics platform using Fastly custom HTTPS Endpoint ## Overview The integration uses Fastly's custom HTTPS endpoint to forward Fastly real-time logs to our Agent Analytics API. Fastly's real-time log streaming offers instant visibility into traffic, performance, threats, and troubleshooting, and streams logs to various destinations including HTTP endpoints. For more information about Fastly real-time logs, [visit the Fastly documentation](https://docs.fastly.com/en/guides/streaming-logs). ## Prerequisites * A Fastly account * Access/permission to edit Logging Endpoints * A Profound Log Ingestion Token for Agent Analytics ## Configuration ![Fastly Detected](https://mintcdn.com/profound-37face47/tg0qbLRw_vFMInTl/images/agent-analytics/fastly/fastly_setup.png?fit=max\&auto=format\&n=tg0qbLRw_vFMInTl\&q=85\&s=376e9c92e922aed26a434d2028bc0af0) **1. Step 1** Sign into the Fastly console, select your service, and navigate to the Service configuration tab. ![Service Configuration Tab](https://mintcdn.com/profound-37face47/tg0qbLRw_vFMInTl/images/agent-analytics/fastly/service_configuration.png?fit=max\&auto=format\&n=tg0qbLRw_vFMInTl\&q=85\&s=9f5c9b84ec0be5034c9e3d29a998bc68) **2. Step 2** Select "Edit configuration" and navigate to the Logging section. Find "HTTPS" and click `+ Create endpoint` ![Logging Endpoint](https://mintcdn.com/profound-37face47/tg0qbLRw_vFMInTl/images/agent-analytics/fastly/logging_endpoint.png?fit=max\&auto=format\&n=tg0qbLRw_vFMInTl\&q=85\&s=1fdf94eb3baeea16c21a0b2d651602f7) **3. Step 3** Configure your HTTPS endpoint with the following settings: ![Configuration](https://mintcdn.com/profound-37face47/tg0qbLRw_vFMInTl/images/agent-analytics/fastly/create_https_endpoint.png?fit=max\&auto=format\&n=tg0qbLRw_vFMInTl\&q=85\&s=f229d92714f0e359e77fe14b9e625acf) * **Name:** Add an informative name * **Placement:** Use the default * **URL:** Enter `https://artemis.api.tryprofound.com/v1/logs/fastly` * **Maximum logs & Maximum bytes:** Optional, configure as needed. * **Log format**: Paste the following log format. This governs what information will be sent to the Agent Analytics API. If you use a different format, your logs may be rejected by the API. ``` { "timestamp": "%{strftime(\{"%Y-%m-%dT%H:%M:%S%z"\}, time.start)}V", "client_ip": "%{req.http.Fastly-Client-IP}V", "start_time": "%{begin:%Y-%m-%dT%H:%M:%S%z}t", "end_time": "%{end:%Y-%m-%dT%H:%M:%S%z}t", "host": "%{req.http.Host}V", "url": "%{json.escape(req.url)}V", "request_method": "%{json.escape(req.method)}V", "request_referer": "%{json.escape(req.http.referer)}V", "request_user_agent": "%{json.escape(req.http.User-Agent)}V", "response_status": %{resp.status}V, "response_body_size": %{resp.body_bytes_written}V } ``` * Time and IP * `timestamp` - Time when the request was completed * `client_ip` - Client IP address * Request Details * `request_method` - HTTP request method * `host` - Requested host header * `url` - Request url path * `request_referer` - Request referrer * `request_user_agent` - Client user agent * Response Details * `start_time` - The time at which the request began * `end_time` - The time at which the request finished * `response_status` - HTTP response status * `response_body_size` - Response size in bytes *For more information see the [documentation](https://docs.fastly.com/en/guides/useful-variables-to-log)* > [!NOTE] > > You may see a warning like: > > ![Warning Message](https://mintcdn.com/profound-37face47/tg0qbLRw_vFMInTl/images/agent-analytics/fastly/warning_message.png?fit=max\&auto=format\&n=tg0qbLRw_vFMInTl\&q=85\&s=05aab745a4e1946bb2ae3cec2df9527c) > > You can safely ignore this message. The validation has been configured for you. **4. Step 4** Next, click "Attach a condition" ![Attach a condition 1](https://mintcdn.com/profound-37face47/tg0qbLRw_vFMInTl/images/agent-analytics/fastly/attach_a_condition1.png?fit=max\&auto=format\&n=tg0qbLRw_vFMInTl\&q=85\&s=70409e193f42a771baa45bb24c161099) ![Attach a condition 2](https://mintcdn.com/profound-37face47/tg0qbLRw_vFMInTl/images/agent-analytics/fastly/attach_a_condition2.png?fit=max\&auto=format\&n=tg0qbLRw_vFMInTl\&q=85\&s=a9c05f001e10b3e81e3b9d7e63bd3817) Enter the following using your domain name: `req.http.host == "my-website.com"` ![Filter to host](https://mintcdn.com/profound-37face47/tg0qbLRw_vFMInTl/images/agent-analytics/fastly/filter_to_host.png?fit=max\&auto=format\&n=tg0qbLRw_vFMInTl\&q=85\&s=70fb508bcb2ebfc02de72b1603b7ee9b) This filter will ensure that only logs for your selected domain are sent to Profound. Select `Save and apply`. **5. Step 5** Scroll down to "Advanced options" ![Advanced Options](https://mintcdn.com/profound-37face47/tg0qbLRw_vFMInTl/images/agent-analytics/fastly/advanced_options.png?fit=max\&auto=format\&n=tg0qbLRw_vFMInTl\&q=85\&s=f604cc2170c571c08d0f610874d8c6c2) Configure: * **Content type** - `application/json` * **Custom header name** - `X-API-Key` * **Custom header value** - Your provisioned Log Ingestion Token for Profound's Agent Analytics Platform (`bot_PROFOUND_LOG_INGESTION_TOKEN`) * **Method** - `POST` * **JSON log entry format** - `Array of JSON` * **Select a log line format** - `Blank` **6. Finished** Save your configuration and activate the new service version. > [!TIP] > > That's it! Fastly will now send real-time logs to Profound. Data should begin appearing in your dashboard within a few minutes. ## Troubleshooting * If logs aren't appearing, verify your HTTPS endpoint configuration * Check Fastly for delivery errors * Verify your Log Ingestion Token is correct * Verify your API endpoint is correct ## Additional Resources * [Fastly's real-time log streaming](https://docs.fastly.com/en/guides/about-fastlys-realtime-log-streaming-features) * [Log streaming: HTTPS](https://docs.fastly.com/en/guides/log-streaming-https) * [Log Formats](https://docs.fastly.com/en/guides/useful-log-formats) * Contact [support@tryprofound.com](mailto:support@tryprofound.com) for API-related questions # Fastly Source: https://docs.tryprofound.com/agent-analytics/fastly-s3 Deliver Fastly access logs to Profound through Amazon S3. ## Overview Send Fastly access logs to your assigned Profound S3 destination to see agent traffic in Agent Analytics. This guide covers Fastly CDN services using VCL and SSE-S3 encryption. > [!NOTE] > > Contact [Profound support](mailto:support@tryprofound.com) to receive your bucket name, destination prefix, region, and IAM role ARN before enabling delivery. For delivery over HTTP, use the [Fastly HTTPS integration](/agent-analytics/fastly). For a Fastly Compute service, contact support to confirm the logging configuration. ## Prerequisites * Access to the Fastly service that handles your website's traffic. * Permission to edit logging endpoints and activate a service version. * Your Fastly account ID, which Profound needs to configure delivery permissions. ## Encryption This guide uses **SSE-S3 (AES256)** to encrypt your logs at rest with keys managed by Amazon S3. ## Configuration **1. Get your destination settings** Contact Profound support with your domain and Fastly account ID. Profound configures the source and a role that allows Fastly to write to your assigned destination. You will receive a bucket name, destination prefix, region, and role ARN. Use the prefix exactly as provided, including the trailing slash. The prefix identifies your source. ```text theme={null} s3://// ``` The role ARN is the authorization value for this setup. You do not need AWS access keys or a Profound HTTP ingestion token. **2. Create an S3 logging endpoint** Open your Fastly service and edit a service version. In its logging settings, create an **Amazon S3** endpoint. | Setting | Value | | - | - | | Name | A descriptive name | | Bucket name | The bucket supplied by Profound | | Path | Your complete assigned prefix, including the trailing slash | | Domain | The S3 endpoint for the supplied region; for `us-west-2`, use `s3.us-west-2.amazonaws.com` | | Access method | **IAM Role** | | IAM role ARN | The role supplied by Profound | | Server side encryption | **Amazon S3-managed keys (SSE-S3 / AES256)** | Keep the default logging placement. Follow Fastly's [S3 endpoint guide](https://www.fastly.com/documentation/guides/integrations/logging-endpoints/object-and-cloud-storage/log-streaming-amazon-s3/) for the current control-panel layout. **3. Set the log format** Paste this template into **Log format** as a single line. It emits the fields expected by Profound's Fastly processor. ```text theme={null} {"timestamp":"%{begin:%Y-%m-%dT%H:%M:%S%z}t","client_ip":"%{req.http.Fastly-Client-IP}V","host":"%{json.escape(req.http.Host)}V","url":"%{json.escape(req.url)}V","request_method":"%{json.escape(req.method)}V","request_referer":"%{json.escape(req.http.Referer)}V","request_user_agent":"%{json.escape(req.http.User-Agent)}V","response_status":%{resp.status}V,"response_body_size":%{resp.body_bytes_written}V} ``` | Fields | Used for | | - | - | | `timestamp` | Request time | | `client_ip` | Client address | | `host` | Requested domain | | `url`, `request_method` | Requested resource | | `request_referer`, `request_user_agent` | Referral and agent analysis | | `response_status`, `response_body_size` | Response details | Use **Blank** for the log line format (`message_type=blank`) so no syslog prefix is added. Each line must contain one JSON object. Profound does not accept the default space-separated log format or a JSON array for this S3 integration. Use uncompressed output or gzip. Gzip filenames must end in `.gz` so Profound can decompress them. Do not enable PGP encryption, Snappy, or Zstandard for this setup. **4. Filter to your domain** Attach a logging condition that matches the hostname you want to monitor. For example: ```text theme={null} req.http.host == "example.com" ``` Replace `example.com` with your hostname. Include any additional hostnames you intend to monitor in your condition. **5. Enable delivery** Once Profound confirms your source is ready, save the endpoint and activate the service version. Generate traffic to the configured domain and allow time for Fastly to deliver a log file. The endpoint's **Period** setting controls how frequently files are finalized. Check that setting when estimating when your test traffic will arrive. ## Verify ingestion Open Agent Analytics for your domain and select a date range covering your test requests. Confirm that expected agent traffic appears after delivery and processing. If data is missing, contact support with your domain, Fastly service ID, endpoint name, request time, and any delivery error or S3 file path. Do not include credentials. ## Troubleshooting | Problem | What to check | | - | - | | Fastly cannot assume the role | Verify the role ARN and the Fastly account ID supplied during setup. Ask Profound to check the role's trust configuration. | | S3 reports AccessDenied | Check the bucket, prefix, regional endpoint, and encryption setting against your assigned values. | | Delivery succeeds but data is missing | Confirm source readiness, the `host` field, and your selected date range. | | Records cannot be processed | Use the single-line JSON template and Blank log line format. Check compression settings. | | No files arrive | Confirm that the service version is active, traffic matches the condition, and the file delivery period has elapsed. | ## Additional Resources * [Fastly: Log streaming to Amazon S3](https://www.fastly.com/documentation/guides/integrations/logging-endpoints/object-and-cloud-storage/log-streaming-amazon-s3/) * [Fastly S3 endpoint settings](https://www.fastly.com/documentation/reference/api/logging/s3/) * [Fastly HTTPS integration](/agent-analytics/fastly) * [Contact Profound support](mailto:support@tryprofound.com) # Google Cloud CDN Source: https://docs.tryprofound.com/agent-analytics/gcp_log_sink This documentation explains how to set up Google Cloud CDN log delivery to Profound Agent Analytics platform using a log sink. ## Overview This integration uses a topic, subscription, and log sink to capture Google Cloud CDN logs and forward them to Profound Agent Analytics platform. ## Prerequisites * A GCP account with Google Cloud CDN enabled * Access and edit permissions to the GCP project * API endpoint details for the Profound Agent Analytics platform ## Configuration ![GCP setup](https://mintcdn.com/profound-37face47/tg0qbLRw_vFMInTl/images/agent-analytics/gcp/gcp_setup.png?fit=max\&auto=format\&n=tg0qbLRw_vFMInTl\&q=85\&s=afcaea65e6de8c8cf41bf68e5da11fe4) **1. Step 1** Sign into the GCP Console and navigate to `Topics`, you can search for 'topics' in the search bar. **2. Step 2** Create a new topic by clicking the `Create Topic` button near the top. ![Create a topic](https://mintcdn.com/profound-37face47/tg0qbLRw_vFMInTl/images/agent-analytics/gcp/create_topic.png?fit=max\&auto=format\&n=tg0qbLRw_vFMInTl\&q=85\&s=b562468b14ddb5f2958332a7cf80ded3) Give your topic a name and click `Create` **3. Step 3** Navigate to the `Subscriptions` tab on the left sidebar. Click the `Create Subscription` button near the top. ![Create subscription](https://mintcdn.com/profound-37face47/tg0qbLRw_vFMInTl/images/agent-analytics/gcp/create_a_subscription.png?fit=max\&auto=format\&n=tg0qbLRw_vFMInTl\&q=85\&s=9dd8d288cad258acaed3fba9b4fc23f2) 1. Give your subscription a name. 2. Select the topic you created in step 2. 3. Use delivery type `Push` * Enter `https://artemis.api.tryprofound.com/v1/logs/gcp_log_sink` as the endpoint * Enable authentication * Paste the service account this subscription will use into the `Service account` field * Leave `Audience` blank * Enable payload unwrapping **4. Step 4** Add retention policy configurations at your discretion. ![Retention policy](https://mintcdn.com/profound-37face47/tg0qbLRw_vFMInTl/images/agent-analytics/gcp/subscription_retention_policy.png?fit=max\&auto=format\&n=tg0qbLRw_vFMInTl\&q=85\&s=99f1706b09abb9289f362878cd3c0239) **5. Step 5** Click `Add a Transform` button. Enter `profound_agent_analytics_reduce` as the function name. Paste the following code into the function body: ```javascript theme={null} /* This UDF is used to filter the unused fields before sending to Profound. * * @param {Object} message - The message to reduce. * @param {Object} metadata - The metadata of the message. * @returns {Object} The reduced message. */ function profound_agent_analytics_reduce(message, metadata) { // parse the message const data = JSON.parse(message.data); // remove unused fields delete data['insertId']; delete data['jsonPayload']; delete data['logName']; delete data['receiveTimestamp']; delete data['resource']; delete data['severity']; delete data['spanId']; delete data['trace']; message.data = JSON.stringify(data); return message; } ``` > [!NOTE] > > This function is used to drop extraneous fields before sending to Profound. This reduces log export volume, improves performance, and enhances data security. ![Transform function](https://mintcdn.com/profound-37face47/tg0qbLRw_vFMInTl/images/agent-analytics/gcp/subscription_transform.png?fit=max\&auto=format\&n=tg0qbLRw_vFMInTl\&q=85\&s=30c80cbdc54364c310f5b1aaeea9477d) Click `Validate` to ensure the function is valid. **6. Step 6** Add additional configurations at your discretion. ![Additional configurations](https://mintcdn.com/profound-37face47/tg0qbLRw_vFMInTl/images/agent-analytics/gcp/subscription_optional_config.png?fit=max\&auto=format\&n=tg0qbLRw_vFMInTl\&q=85\&s=c863a14ff66be1824ce1878df86bee24) Click `Create` to create the subscription. **7. Step 7** Navigate to the `Log Router` tab by searching 'log router' in the search bar. Click the `Create sink` button near the top. Give your sink a name and optional description. **8. Step 8** In the `Sink destination` section, select `Cloud Pub/Sub topic` as the `sink service`. In the `sink destination` field, select the topic you created in step 2. ![Sink service](https://mintcdn.com/profound-37face47/tg0qbLRw_vFMInTl/images/agent-analytics/gcp/sink_service.png?fit=max\&auto=format\&n=tg0qbLRw_vFMInTl\&q=85\&s=fc04900889359ece1c61f29f3c0f6645) **9. Step 9** Add the following filters to your sink in the `Choose logs to include in sink` section. > [!WARNING] > > Make sure to replace the placeholders with your real load balancer and url map names. **This is only an example.** ```toml theme={null} resource.type="http_load_balancer" resource.labels.forwarding_rule_name="MY-FORWARDING-RULE-NAME" resource.labels.url_map_name="MY-URL-MAP-NAME" ``` ![Sink filters](https://mintcdn.com/profound-37face47/tg0qbLRw_vFMInTl/images/agent-analytics/gcp/sink_filters.png?fit=max\&auto=format\&n=tg0qbLRw_vFMInTl\&q=85\&s=5b2447b42a4b3bb85515a7fff4f9c275) Finally, click `Create sink` at the bottom. > [!NOTE] > > If you have multiple load balancers and url maps, you can modify the filters to include multiple resources like: > > ```toml theme={null} > resource.type="http_load_balancer" > AND ( > (resource.labels.forwarding_rule_name="MY-FORWARDING-RULE-NAME" > AND resource.labels.url_map_name="MY-URL-MAP-NAME") > OR > (resource.labels.forwarding_rule_name="MY-FORWARDING-RULE-NAME-2" > AND resource.labels.url_map_name="MY-URL-MAP-NAME-2") > ) > ``` **10. Step 10** > [!WARNING] > > If you are registering multiple GCP domains with Profound, you will need to create a separate service account for each domain. The account is used to decode the JWT token and confirm the source domain. Navigate back to Profound. On the Agent Analytics onboarding page, paste the same service account email you used in step 3 into the `GCP Service Account` field. Ensure you click `Save` after pasting the email. ![Service account](https://mintcdn.com/profound-37face47/tg0qbLRw_vFMInTl/images/agent-analytics/gcp/gcp_setup.png?fit=max\&auto=format\&n=tg0qbLRw_vFMInTl\&q=85\&s=afcaea65e6de8c8cf41bf68e5da11fe4) Click `Continue` to complete the onboarding process. > [!TIP] > > That's it! Google Cloud CDN will now send real-time logs to Profound. Data should begin appearing in your dashboard within a few minutes. ## Troubleshooting * Ensure you have shared the same service account email with Profound that you used to create the subscription. * Check the `Logs` tab in Profound to verify the logs are being received. * Verify the service account has the necessary permissions to access the topic as pub/sub. * Verify the topic is created and active. * Verify the subscription is created and active. ## Additional Resources * [Third Party Log Routing Documentation](https://docs.cloud.google.com/logging/docs/export/pubsub#integrate-thru-pubsub) * [Service Account Management Documentation](https://docs.cloud.google.com/iam/docs/create-service-agents#grant-role) * Contact [support@tryprofound.com](mailto:support@tryprofound.com) for API-related questions # Netlify Integration Source: https://docs.tryprofound.com/agent-analytics/netlify This guide explains how to configure Netlify Log Drains to forward your application logs to Profound Agent Analytics platform for comprehensive monitoring and analysis. > [!NOTE] > > Netlify Log Drains are only available on Enterprise plans. ## Overview Netlify General HTTP Endpoint Log Drains enable you to stream your application logs to external services for enhanced monitoring and analytics. By integrating with Profound's Agent Analytics platform, you can gain deeper insights into your site's performance, track visitor behavior, and monitor AI agent interactions in real-time. ## Prerequisites * A Netlify account with Enterprise plan * Administrative access to your Netlify team settings * Your Profound Log Ingestion Token (provisioned during onboarding) * A deployed Netlify site with production traffic ## Configuration ![Netlify Detected](https://mintcdn.com/profound-37face47/tg0qbLRw_vFMInTl/images/agent-analytics/netlify/netlify_setup.png?fit=max\&auto=format\&n=tg0qbLRw_vFMInTl\&q=85\&s=e9bd35718c1d642d9c8499aae3bb1f6b) **1. Step 1** Navigate to your project in the Netlify dashboard. On the left, click **Logs > Log Drains** ![Log Drains](https://mintcdn.com/profound-37face47/tg0qbLRw_vFMInTl/images/agent-analytics/netlify/log_drains.png?fit=max\&auto=format\&n=tg0qbLRw_vFMInTl\&q=85\&s=403dc144e903f43f448cbcdd2a779ecd) **2. Step 2** Click **Enable Log Drain** and select `General HTTP Endpoint` ![Http Endpoint](https://mintcdn.com/profound-37face47/tg0qbLRw_vFMInTl/images/agent-analytics/netlify/http_endpoint.png?fit=max\&auto=format\&n=tg0qbLRw_vFMInTl\&q=85\&s=f4db6bad9062aa6106f8003f57be678b) **3. Step 3** Prepare your log drain. Uncheck: * **Function logs** * **Edge function logs** * **Deploy logs** * **WAF logs** * **Exclude personally identifiable information (PII)** You should only use **Traffic Logs** for the log drain. Prepare your endpoint and authorization: * URL: `https://artemis.api.tryprofound.com/v1/logs/netlify` * Authorization Header: `Bearer bot_xxx` Leave **JSON** selected in the **Log Drain Format**. ![Configure Http Endpoint](https://mintcdn.com/profound-37face47/tg0qbLRw_vFMInTl/images/agent-analytics/netlify/configure_endpoint.png?fit=max\&auto=format\&n=tg0qbLRw_vFMInTl\&q=85\&s=a0ba4afdaec87c3c26193e447b594039) > [!NOTE] > > Your configuration should match the screenshot above. **4. Step 4** Click **Connect** to connect the log drain. > [!WARNING] > > If you see the following error: > > `incorrectly configured GetURL, validation request returns status code 400` > > double check you have prefixed your token with `Bearer ` ![Configuration Complete](https://mintcdn.com/profound-37face47/tg0qbLRw_vFMInTl/images/agent-analytics/netlify/configuration_complete.png?fit=max\&auto=format\&n=tg0qbLRw_vFMInTl\&q=85\&s=9aa26eb73af4ec97e9c0144de06d4b49) > [!TIP] > > That's it! Netlify will now send real-time logs to Profound. Data should begin appearing in your dashboard within a few minutes. ## Troubleshooting * If logs aren't appearing in your Profound dashboard, verify your endpoint targets `/v1/logs/netlify` * For authentication or Log Ingestion Token issues ensure you have prefixed the token with `Bearer ` ## Additional Resources * [Netlify Log Drains Documentation](https://docs.netlify.com/monitor-sites/log-drains/?monitoring-providers=general) * Contact [support@tryprofound.com](mailto:support@tryprofound.com) for integration assistance ## Security Considerations * Store Log Ingestion Tokens securely in environment variables * Regularly rotate your Log Ingestion Token * Monitor log drain activity for unusual patterns * Use HTTPS endpoints for all log forwarding # About Agent Analytics Source: https://docs.tryprofound.com/agent-analytics/overview Gain unprecedented visibility into how AI systems interact with your website ## Overview Profound Agent Analytics provides enterprise-grade visibility into how AI systems interact with your digital presence. As AI search engines and assistants become primary discovery channels, understanding and optimizing for AI visibility is crucial for modern digital strategy. ## The AI Analytics Challenge ### The Rise of AI Web Interactions AI systems are revolutionizing how information is discovered and consumed online. Search engines like ChatGPT, Claude, and Google Gemini don't just index your content: they interpret it, synthesize it, and present it to users in entirely new ways. ### Why Traditional Analytics Fall Short Traditional web analytics tools were designed for human visitors who: * Execute JavaScript * Maintain cookies and sessions * Follow predictable browsing patterns AI systems operate differently: * They bypass JavaScript execution * Don't maintain session state * Access content through specialized crawlers * Exhibit varying behavioral patterns based on their purpose (indexing, training, or real-time assistance) This fundamental mismatch makes traditional tracking methods ineffective for monitoring AI interactions. ## The Profound Solution ### Architecture Built for AI Profound's analytics platform is engineered specifically for tracking AI systems: * **Server-Side First**: Implementation at the infrastructure level ensures complete visibility of AI interactions * **Edge Integration**: Direct CDN integration captures requests before caching, providing the most accurate data * **Advanced Bot Detection**: Sophisticated algorithms differentiate between various types of AI crawlers * **High-Performance Backend**: Columnar OLAP databases enable real-time analysis of billions of requests ### Comprehensive AI Visibility Track interactions from major AI platforms: * OpenAI (ChatGPT) * Anthropic (Claude) * Google (Gemini/VertexAI) * Perplexity * Microsoft (Bing) * Apple * Meta * DeepSeek * Emerging AI systems ### Real-Time Intelligence Monitor AI interactions as they happen: * Track which content AI systems access * Understand how your content appears in AI responses * Identify content gaps and optimization opportunities * Analyze AI crawling patterns and frequencies ## Implementation Approaches ### CDN Integration For websites using Content Delivery Networks, we recommend integrating at the CDN level: * **Maximum Accuracy**: Capture requests before caching occurs * **Complete Coverage**: Track all AI interactions, including cached content * **Simplified Setup**: Native integration with major providers: ### Roadmap > [!NOTE] > > Roadmap timelines are estimates and subject to change as Profound continues to expand its integration coverage. #### 2026 * General AWS S3 Bucket Integration (Q3 2026) * Microsoft Azure CDN (Q4 2026) ### Direct Server Integration For applications without CDN infrastructure: * **API Integration**: Direct integration with your application servers * **Log Ingestion**: Process server logs for AI interaction data * **Custom Solutions**: Tailored implementations for unique infrastructures ## Key Features ### AI Crawler Analytics * Detailed crawler identification and classification * Real-time tracking of crawl events * Pattern analysis and trend monitoring * Coverage analysis and gap detection ### Performance Metrics * Response time analysis * Content accessibility metrics * Cache effectiveness monitoring * Geographic distribution of AI access ### Content Visibility * Page-level AI interaction tracking * Optimization recommendations * Content effectiveness scoring ### Advanced Reporting * Trend analysis * Export capabilities ## Technology Stack Profound is built on enterprise-grade technology: * **Detection Engine**: Advanced machine learning models for accurate bot classification * **Data Processing**: High-performance columnar databases for real-time analytics * **API Layer**: RESTful APIs for seamless integration * **Security**: Enterprise-grade encryption and access controls ## Getting Started Ready to gain visibility into your AI presence? > **[Integration Guides](/agent-analytics/self-serve-onboarding)** > > Step-by-step guides for implementing Profound Analytics > **[Support](mailto:support@tryprofound.com)** > > Connect with our integration specialists # Page type methodology Source: https://docs.tryprofound.com/agent-analytics/page-type-methodology How Profound classifies website pages for Agent Analytics and benchmarking. Profound classifies website URLs into page types so Agent Analytics can show how AI traffic and benchmarking performance differ across kinds of content. Page types are used in page-level reporting and benchmarking views. They help compare similar pages against similar pages instead of mixing fundamentally different URL types, such as blog posts, product pages, documentation, pricing pages, and technical infrastructure. ## How page types are assigned Profound classifies URL patterns, not every individual URL independently. For each website, Profound studies the host's URL structure, groups similar paths like `/blog/`, `/docs/`, `/products/*`, or `/pricing`, and assigns durable page types to those reusable patterns. Once patterns are saved, future URLs are tagged deterministically by matching their host and path against the active mappings. When a path is ambiguous or risky, Profound may use page evidence such as the title, meta description, headings, and visible page text to make a second-pass classification decision. This helps avoid relying on URL shape alone. ## Page type definitions | Page type | Definition | | - | - | | `blog_editorial` | Informational or editorial content such as articles, guides, thought leadership, news, press releases, case studies, glossary pages, research pages, media posts, and SEO content. | | `product_page` | Pages where a user evaluates, discovers, compares, or selects an offering. This includes product, feature, solution, ecommerce product detail, category, marketplace, catalog, listing, inventory, integration, and template pages. | | `docs_support` | Help, support, and documentation pages. This includes technical docs, help center articles, API references, manuals, troubleshooting pages, warranty pages, and support content. | | `landing_page` | Campaign-specific or conversion-focused pages, such as promotional pages, seasonal pages, partner campaigns, paid acquisition pages, product launch pages, event or webinar registration pages, trial pages, sign up pages, and lead-capture pages. | | `brand_about` | Pages about the company, brand, organization, or physical presence. This includes about pages, company pages, mission, team, leadership, careers, contact, locations, store locators, and investor pages. Home, security, and trust pages may classify here when supported by host-specific mappings or page evidence. | | `pricing` | Pricing, plans, subscription tiers, packages, and plan comparison pages. | | `ugc_page` | Public pages created or owned by users, customers, members, creators, vendors, or community participants rather than the brand itself. Examples include public profiles, creator pages, storefronts, vendor profiles, forum threads, community questions, reviews, and donation or tip pages. | | `technical_infra` | Machine-readable or infrastructure URLs used for crawling, indexing, AEO/SEO, APIs, tracking, or site operation. Examples include `robots.txt`, `llms.txt`, sitemaps, manifests, service workers, XML/JSON feeds, API endpoints, tracking endpoints, metrics endpoints, CDN/proxy URLs, and similar infrastructure files. | | `file_asset` | Direct downloadable or static file URLs, such as PDFs, images, videos, ZIP files, spreadsheets, presentations, documents, calendar files, catalogs, reports, and other file-extension-based assets. | | `other` | Utility, legal, transactional, or unmatched pages that should not be forced into another page type. Includes privacy, terms, login, sign up, account, cart, checkout, and internal search pages. Also used as the fallback when no mapping confidently classifies the page. | ## Fallback behavior Profound uses a closed taxonomy: every page used in Agent Analytics benchmarking resolves to a page type. If no active host-specific mapping matches a URL, Profound applies generic fallback rules for common patterns such as `/blog/`, `/docs/`, `/pricing`, file extensions, infrastructure files, login pages, and legal pages. If neither host-specific mappings nor generic fallback rules confidently classify the page, the page resolves to `other`. This prevents ambiguous URLs from being over-classified while preserving them for reporting. ## How page types are used in benchmarking Benchmarking uses page types to compare pages against the appropriate peer distribution. For example, a product page should be compared against product pages, and a docs page should be compared against docs/support pages. Some benchmarking views show all page types together, while page-specific views may filter to a selected page type. The `other` page type remains available in metrics, but it should be interpreted as a utility or fallback bucket rather than a strategic content category. ## Limitations Page type classification is based on URL patterns and available page evidence. Some sites use ambiguous URL structures, reuse paths for multiple content types, or change templates over time. In those cases, classification may require review and mapping updates. # Getting Started Source: https://docs.tryprofound.com/agent-analytics/self-serve-onboarding Set up Agent Analytics in just a few clicks ## Overview Agent Analytics is Profound's powerful tracking solution that provides comprehensive insights into user interactions on your website. In this guide, you'll learn how to quickly add and configure a domain for tracking, allowing you to monitor traffic patterns, user behavior, and performance metrics. Setting up Agent Analytics takes just a few minutes and requires minimal technical expertise. Once configured, you'll gain access to an intuitive dashboard that displays real-time data, helping you make informed decisions to optimize your website's performance and enhance the user experience. ## Prerequisites * A Profound account * Access to your domain's hosting provider (for example, Cloudflare, Vercel, etc.) ## Onboarding **1. Step 1** Navigate to the Agent Analytics tab on the left sidebar. ![My Website Tab](https://mintcdn.com/profound-37face47/Mo0VGkZHXuvRdZKy/images/self-serve/sidebar.png?fit=max\&auto=format\&n=Mo0VGkZHXuvRdZKy\&q=85\&s=aabcb6884453ae153d343776141c2b21) **2. Step 2** > [!NOTE] > > If you are configuring your first domain, you can skip this step. Click on your existing domain near the top and select `+ Add a new website` from the dropdown menu or use the button in the top right. ![Add a New Website](https://mintcdn.com/profound-37face47/Mo0VGkZHXuvRdZKy/images/self-serve/add_new_website.png?fit=max\&auto=format\&n=Mo0VGkZHXuvRdZKy\&q=85\&s=c507aa995d22ec7d84c2a4281af48810) **3. Step 3** You will then see the following window. Use the input field to enter the apex domain you want to track. ![Enter Domain](https://mintcdn.com/profound-37face47/Mo0VGkZHXuvRdZKy/images/self-serve/registration_modal.png?fit=max\&auto=format\&n=Mo0VGkZHXuvRdZKy\&q=85\&s=db31e197e97c5bb725f3e7b0d152d428) **4. Step 4** Profound will attempt to automatically detect your domain's hosting provider. Ensure the correct provider is selected before continuing. **5. Step 5** To continue, select the appropriate provider and follow the setup guide. > **[Cloudflare (Worker)](/agent-analytics/cloudflare_worker)** > > Connect your Profound account to your Cloudflare account with a lightweight worker > **[Cloudflare (Logpush)](/agent-analytics/cloudflare_logpush)** > > Connect your Profound account to your Cloudflare account with Logpush > **[Vercel (Connectable Account)](/agent-analytics/vercel_native)** > > Integrate your Vercel account with Agent Analytics in just a few clicks > **[Amazon CloudFront](/agent-analytics/aws_firehose_cloudfront)** > > Use Amazon Data Firehose to deliver real-time logs to Profound > **[Fastly](/agent-analytics/fastly)** > > Connect your Fastly traffic to Profound with a Custom HTTPS Endpoint > **[Netlify](/agent-analytics/netlify)** > > Connect your Netlify traffic to Profound with Log Drains > **[Akamai](/agent-analytics/akamai)** > > Connect your Akamai traffic to Profound with DataStream2 > **[Google Cloud CDN](/agent-analytics/gcp_log_sink)** > > Connect your Google Cloud CDN traffic to Profound with a log sink > **[WordPress Plugin](/agent-analytics/wordpress/introduction)** > > Use the WordPress plugin to send request logs to Profound > **[Custom Integration](/agent-analytics/custom)** > > Build your own custom integration with standardized log drain formats ### Need Help? Our team is here to support you every step of the way. For personalized assistance with your integration, reach out through your dedicated Slack channel. > **[FAQ](/agent-analytics/faq)** > > Frequently Asked Questions about Agent Analytics and Google Analytics > **[Profound Status](https://status.tryprofound.com/en)** > > Monitor our service health and stay updated on system performance in real-time > **[Contact](mailto:support@tryprofound.com)** > > Work with our team to design and build integrations tailored to your unique infrastructure needs ## Troubleshooting * Ensure you have configured the proper domain you want to track * Ensure you selected your hosting provider * Verify you have completed all the steps in the relevant documentation * Be aware it may take several minutes to see data * Reach out to [support](mailto:support@tryprofound.com) # Shopify Source: https://docs.tryprofound.com/agent-analytics/shopify This documentation details 3 potential Shopify log drain integrations for Profound Agent Analytics platform. ## Overview > [!NOTE] > > Please carefully read the documentation to determine which integration is best for your Shopify site. Not sure which to use? Please contact [support](mailto:support@tryprofound.com) for assistance. This integration is designed to capture logs from a Shopify site. Shopify is unlike other integrations in that there is no out-of-the-box solution for log exports. We detail three potential integrations for Shopify: 1. Shopify via Nostra (Recommended) 2. Shopify Log Drain via Hydrogen (Requires Hydrogen) 3. Shopify Trace Exporter (Requires Hydrogen) ## Prerequisites * A Shopify site * Access and management permissions to the Shopify site * If connecting via **Nostra**, you must be a customer of both Profound and Nostra. * If connecting via **Hydrogen**, you must have a Shopify Plus account. ## Configuration ![Shopify setup](https://mintcdn.com/profound-37face47/jkiOf0G56QSlBLCH/images/agent-analytics/shopify/shopify_setup.png?fit=max\&auto=format\&n=jkiOf0G56QSlBLCH\&q=85\&s=3ac484e400fcb734ec29cdea1c7c4608) **Shopify via Nostra (Recommended)** Learn how to integrate your Shopify site with Profound Partner Nostra > [!NOTE] > > Integrating your Shopify site via Nostra is the recommended method with optimal analytics data. This method requires you to use Nostra's platform to track your Shopify site. **1. Step 1** Ensure you are a Nostra customer hosting your Shopify site on their platform. **2. Step 2** Contact your Nostra account representative to request a log drain integration. **3. Step 3** Once the integration is complete, you will be able to see your Shopify site in the Profound dashboard. > [!TIP] > > That's it! Your Shopify site is now integrated with Profound via Nostra. **Shopify Log Drain via Hydrogen (Requires Hydrogen)** Learn how to integrate your Shopify site with Profound via Hydrogen. > [!WARNING] > > This method requires your site uses Hydrogen and you have a Shopify Plus account. **1. Step 1** Ensure your Shopify site uses Hydrogen and you have a Shopify Plus account. **2. Step 2** Navigate to the Hydrogen Log Drain setup [documentation](https://shopify.dev/docs/storefronts/headless/hydrogen/logging#connecting-a-log-drain) and follow the instructions to configure the log drain. **3. Step 3** Select an `HTTP` log drain for generic integrations. Enter the following URL: `https://artemis.api.tryprofound.com/v1/logs/shopify_hydrogen` **4. Step 4** Provide a header value `Bearer` with your Profound Log Ingestion Token. Your token should start with `bot_PROFOUND_LOG_INGESTION_TOKEN`. **5. Step 5** Click **Connect** to connect the log drain. ![Hydrogen Log Drain Configuration](https://mintcdn.com/profound-37face47/zh0y2yz9HzqrrnAo/images/agent-analytics/shopify/shopify_hydrogen.png?fit=max\&auto=format\&n=zh0y2yz9HzqrrnAo\&q=85\&s=89e5772d381aee0d39da5c638669a872) > [!TIP] > > That's it! Your Shopify site is now integrated with Profound via Hydrogen. **Shopify Trace Exporter (Requires Hydrogen)** Learn how to integrate your Shopify site with Profound via the Trace Exporter. > [!NOTE] > > This method provides sampled tracing data, not a full log export. > [!WARNING] > > This method requires your site uses Hydrogen and you have a Shopify Plus account. **1. Step 1** Ensure your Shopify site uses Hydrogen and you have a Shopify Plus account. **2. Step 2** Navigate to the Hydrogen Trace Export setup [documentation](https://shopify.dev/docs/storefronts/headless/hydrogen/trace-exports#configure-trace-exports) and follow the instructions to configure trace exports. **3. Step 3** Select an `HTTP` trace export for generic integrations. Enter the following URL: `https://artemis.api.tryprofound.com/v1/logs/shopify_hydrogen` **4. Step 4** Provide a header value `x-api-key` with your Profound Log Ingestion Token. Your token should start with `bot_PROFOUND_LOG_INGESTION_TOKEN`. **5. Step 5** Click **Save** to save the trace export configuration. > [!TIP] > > That's it! Your Shopify site is now integrated with Profound via the Trace Exporter. ## Limitations of Hydrogen-Based Integrations > [!WARNING] > > **Important**: Shopify's Hydrogen platform does not expose client IP addresses in log drains or trace exports. This is a platform limitation, not a Profound limitation. ### The Issue Profound's Agent Analytics uses a multi-step verification process to accurately classify traffic, distinguishing real users from bots, crawlers, and automated agents. A key input to this process is the client IP address. Shopify's Hydrogen runtime, hosted on Oxygen, strips client IP information from logs and traces before they reach external consumers. Because Profound never receives IP data through these integrations, the multi-step verification process cannot be performed. This is an unavoidable platform constraint imposed by Shopify. There is no configuration, workaround, or API option to include IP addresses in Hydrogen log drains or trace exports. ### Impact on Analytics Without client IP addresses, Profound cannot: * Perform IP-based reputation checks against known bot networks * Correlate requests across sessions for behavioral analysis * Apply geographic and network-level classification signals * Execute the full multi-step verification pipeline Analytics data from Hydrogen-based integrations will still be collected and displayed, but classification accuracy is reduced compared to integrations that provide complete request metadata. ### Recommendation We recommend integrating your Shopify site via **Nostra** (option 1 above). Nostra's platform uses a Cloudflare integration under the hood, which provides full request metadata, including client IP addresses. This means the Nostra integration does not suffer from any of the limitations described above, and Profound can run the complete multi-step verification process. Using the Nostra integration requires you to be a customer of both **Profound** and **Nostra**. > [!NOTE] > > This limitation is not unique to Agent Analytics. Any third-party service consuming Hydrogen log drains or trace exports faces the same constraint: Shopify simply does not include client IP data in these exports. The recommended path for complete traffic visibility on Shopify is through a CDN-native integration like Nostra. # Vercel Integration (Connectable Account) Source: https://docs.tryprofound.com/agent-analytics/vercel_native This guide explains how to set up a Vercel Log Drain via the Profound Agent Analytics Integration ## Overview Vercel Log Drains provide a way to forward your Vercel application logs to [Profound Agent Analytics](https://vercel.com/cooper-square-technologies/~/integrations/profound) platform. By integrating with Profound's Agent Analytics platform, you gain access to comprehensive monitoring features including automated agent detection and real-time performance analysis. ## Prerequisites Before beginning the integration process, ensure you have: * A Vercel account with administrative access * A Profound account with an active subscription * Administrative access to your Vercel project settings ## Configuration ![Vercel Detected](https://mintcdn.com/profound-37face47/tg0qbLRw_vFMInTl/images/agent-analytics/vercel_integration/vercel_setup.png?fit=max\&auto=format\&n=tg0qbLRw_vFMInTl\&q=85\&s=9cad98d8b0967c2d6d55f8ffb7810633) **1. Access Project Settings** Log into your Vercel Dashboard and navigate to your project's settings at **Settings** > **Log Drains**. ![Settings](https://mintcdn.com/profound-37face47/tg0qbLRw_vFMInTl/images/agent-analytics/vercel_integration/settings_log_drains.png?fit=max\&auto=format\&n=tg0qbLRw_vFMInTl\&q=85\&s=50597b2fcc00c1607de43afb9da5b943) **2. Add Log Drain** In the top right, press the **Add Log Drain** button. This will open a list of integrations. Search for "Profound Agent Analytics" and select it. Press **Continue**. ![Profound AA Integration](https://mintcdn.com/profound-37face47/tg0qbLRw_vFMInTl/images/agent-analytics/vercel_integration/profound_aa_integration.png?fit=max\&auto=format\&n=tg0qbLRw_vFMInTl\&q=85\&s=465f19a2ab530c9948b074d975712abb) **3. Select Project Access** You will now be prompted to configure the log drain. Select **Specific Projects** and add the projects you would like to track via Profound's Agent Analytics service. Press **Connect Account** when ready. > [!NOTE] > > All projects you give access to will be configured for Profound's Agent Analytics. > It is critical you select only the projects you wish to track in Profound. > > **Do not share access to projects you do not intend to track via Profound.** ![Select Projects](https://mintcdn.com/profound-37face47/tg0qbLRw_vFMInTl/images/agent-analytics/vercel_integration/select_specific_projects.png?fit=max\&auto=format\&n=tg0qbLRw_vFMInTl\&q=85\&s=37f68d4f1c8a494f141c40add6ad3f06) **4. Validate Projects and Domains** You will be redirected to Profound to finish the configuration. > **Logged out?** > > If you are logged out, you will see a login prompt. > > ![Logged Out](https://mintcdn.com/profound-37face47/tg0qbLRw_vFMInTl/images/agent-analytics/vercel_integration/logged_out.png?fit=max\&auto=format\&n=tg0qbLRw_vFMInTl\&q=85\&s=b1e298f8f29bf67402ffde47a03b2f7f) > > Simply enter your email, complete any OAuth or SSO steps, and you will be returned to the page below. > **No Profound account?** > > Agent Analytics requires access to the Profound platform and thus a Profound account. If you do not have an account, press **I'm new to Profound**. > > ![Logged Out](https://mintcdn.com/profound-37face47/tg0qbLRw_vFMInTl/images/agent-analytics/vercel_integration/logged_out.png?fit=max\&auto=format\&n=tg0qbLRw_vFMInTl\&q=85\&s=b1e298f8f29bf67402ffde47a03b2f7f) > > This will open the pricing page in a new tab. Press **Start** to proceed. > > ![Pricing](https://mintcdn.com/profound-37face47/tg0qbLRw_vFMInTl/images/agent-analytics/vercel_integration/pricing.png?fit=max\&auto=format\&n=tg0qbLRw_vFMInTl\&q=85\&s=66ecfd365afad858ac1dfd1ee31db5cc) > > Because a Profound account is required, you must complete this process **before** completing the integration. > > ![Onboard](https://mintcdn.com/profound-37face47/tg0qbLRw_vFMInTl/images/agent-analytics/vercel_integration/create_account.png?fit=max\&auto=format\&n=tg0qbLRw_vFMInTl\&q=85\&s=8a8e9e7bce7b42b487e57091454b4015) Double check the projects and domains in the list. These are the domains that will be tracked via Agent Analytics. Likewise, ensure your Profound Organization is selected. If you are a member of many organizations, double check the proper one is selected. Press **Continue** when ready. ![Verify Projects and Domains](https://mintcdn.com/profound-37face47/tg0qbLRw_vFMInTl/images/agent-analytics/vercel_integration/verify_projects_and_domains.png?fit=max\&auto=format\&n=tg0qbLRw_vFMInTl\&q=85\&s=0ddfa6ff5c47d4bab470ad46b57484d8) **5. Finish Up** After pressing **Continue**, Vercel will verify the integration. ![Vercel Verify](https://mintcdn.com/profound-37face47/tg0qbLRw_vFMInTl/images/agent-analytics/vercel_integration/completing_install.png?fit=max\&auto=format\&n=tg0qbLRw_vFMInTl\&q=85\&s=edbd937994c19c127019b1f7dfd8d7a7) You will be returned to the integration homepage. ![Integration Page](https://mintcdn.com/profound-37face47/tg0qbLRw_vFMInTl/images/agent-analytics/vercel_integration/integration_page.png?fit=max\&auto=format\&n=tg0qbLRw_vFMInTl\&q=85\&s=0244a67a55a472247a157fba152b5283) > [!TIP] > > That's it! Vercel will now send real-time logs to Profound. Data should begin appearing in your dashboard within a few minutes. ## Remove Integration **1. Access the Integration Settings** There are a few ways to disable the integration. 1. Option 1 Select the project you configured. Navigate to **Settings** > **Log Drains**. ![Log Drains](https://mintcdn.com/profound-37face47/tg0qbLRw_vFMInTl/images/agent-analytics/vercel_integration/disable_log_drain.png?fit=max\&auto=format\&n=tg0qbLRw_vFMInTl\&q=85\&s=9b553f4cd4d9795f6c5bf39af9e861be) Press **Manage**. 2. Option 2 Navigate to **Project** > **Integrations** in the top toolbar. ![Manage Integrations](https://mintcdn.com/profound-37face47/tg0qbLRw_vFMInTl/images/agent-analytics/vercel_integration/manage_integration.png?fit=max\&auto=format\&n=tg0qbLRw_vFMInTl\&q=85\&s=4c0cdf1cbdd4a09f35fc69986f6ee224) Press **Manage**. **2. Integration Settings** Either option will redirect you to the integration page. ![Integration Page](https://mintcdn.com/profound-37face47/tg0qbLRw_vFMInTl/images/agent-analytics/vercel_integration/integration_page.png?fit=max\&auto=format\&n=tg0qbLRw_vFMInTl\&q=85\&s=0244a67a55a472247a157fba152b5283) Press **Settings** in the navigation tabs at the top. **3. Uninstall Integration** To remove the integration, scroll to the bottom of the **Settings** page and press **Uninstall Integration** and complete the steps required by Vercel. ![Uninstall](https://mintcdn.com/profound-37face47/tg0qbLRw_vFMInTl/images/agent-analytics/vercel_integration/uninstall_integration.png?fit=max\&auto=format\&n=tg0qbLRw_vFMInTl\&q=85\&s=98802c92eabb07c3cd261796f6635df0) > [!TIP] > > You have now removed the integration. Logs will no longer be sent to Profound Agent Analytics. ## Additional Resources * [Integration Documentation](https://vercel.com/cooper-square-technologies/~/integrations/profound-test) * [Vercel Log Drain Documentation](https://vercel.com/docs/observability/log-drains) * Contact [support@tryprofound.com](mailto:support@tryprofound.com) for integration assistance # WordPress Plugin Installation Source: https://docs.tryprofound.com/agent-analytics/wordpress/installation This guide explains how to install and configure the Agent Analytics plugin for WordPress to send HTTP request logs to the Profound platform > [!WARNING] > > The WordPress plugin can have limited functionality by nature of the WordPress platform. Please read the [limitations](/agent-analytics/wordpress/limitations) page to understand more. ## Overview The Agent Analytics [WordPress plugin](https://wordpress.org/plugins/profound-agent-analytics/) enables automatic log collection from your WordPress site, forwarding visitor traffic data to the Profound Agent Analytics platform. The plugin operates transparently in the background, capturing only public traffic while excluding all administrative and system activity. ## Prerequisites Before beginning the installation, ensure you have: * A WordPress site running version 6.0 or higher * Administrative access to your WordPress dashboard * A Profound account with a Log Ingestion Token * PHP 7.4 or higher on your hosting environment ## Installation ![Wordpress Detected](https://mintcdn.com/profound-37face47/tg0qbLRw_vFMInTl/images/agent-analytics/wordpress/wordpress_setup.png?fit=max\&auto=format\&n=tg0qbLRw_vFMInTl\&q=85\&s=f42646e73b1c7a0b855229e799d0d5a4) **1. Step 1** Log into your WordPress admin dashboard and navigate to **Plugins** in the left sidebar. Click **Add New** at the top of the Plugins page. Search for "Profound Agent Analytics" or visit the [WordPress plugin page](https://wordpress.org/plugins/profound-agent-analytics/) to download the plugin. ![WordPress Plugins Navigation](https://mintcdn.com/profound-37face47/tg0qbLRw_vFMInTl/images/agent-analytics/wordpress/install.png?fit=max\&auto=format\&n=tg0qbLRw_vFMInTl\&q=85\&s=d5b2c8c215318441535107aea7c5c8b9) Click **Install Now** to install the plugin. **2. Step 3** After installation completes, click **Activate** to activate the plugin. Alternatively, navigate to **Plugins** → **Installed Plugins**, find "Agent Analytics" in the list, and click **Activate**. ![Activate Plugin](https://mintcdn.com/profound-37face47/tg0qbLRw_vFMInTl/images/agent-analytics/wordpress/activate.png?fit=max\&auto=format\&n=tg0qbLRw_vFMInTl\&q=85\&s=295589131a4bab05245026c263d1ca7a) **3. Step 4** Once activated, navigate to **Settings** → **Agent Analytics** in your WordPress admin menu. **4. Step 5** In the General settings tab: 1. Check the **Enable Logging** checkbox to activate log collection 2. Enter your Profound Log Ingestion Token (starts with `bot_`) in the **Log Ingestion Token** field 3. Leave the **API Endpoint** at its default value unless instructed otherwise 4. Optionally adjust the **Batch Size** and **Send Interval** settings. ![API Configuration](https://mintcdn.com/profound-37face47/tg0qbLRw_vFMInTl/images/agent-analytics/wordpress/settings.png?fit=max\&auto=format\&n=tg0qbLRw_vFMInTl\&q=85\&s=bba8eb1b9fb0ec5f5b70f27300ea1b16) > [!WARNING] > > Your Log Ingestion Token is sensitive information. For production sites, consider using environment variables instead of database storage. See the [security documentation](/agent-analytics/wordpress/security) for details. **5. Step 6 (Optional)** Navigate to the **Privacy** tab to adjust filtering options: * **Query Parameter Redaction**: Add any additional sensitive parameters to redact (default includes passwords, tokens, cards) * **Path Filtering**: Add custom paths to exclude from logging * **Skip Options**: Toggle exclusion of admin, cron, AJAX, or REST API requests ![Privacy Settings](https://mintcdn.com/profound-37face47/tg0qbLRw_vFMInTl/images/agent-analytics/wordpress/privacy.png?fit=max\&auto=format\&n=tg0qbLRw_vFMInTl\&q=85\&s=166226249d5a8483233df5348a382640) > [!NOTE] > > The plugin automatically excludes all WordPress admin activity and system paths. These settings allow additional customization beyond the defaults. **6. Step 7** Click **Save Changes** at the bottom of the settings page. Navigate to the **Status** tab to verify your configuration: 1. Check that the **Queue Status** shows as "Active" 2. Click **Send Test Event** to verify connectivity 3. Confirm you see "Test event sent successfully" ![Status Verification](https://mintcdn.com/profound-37face47/tg0qbLRw_vFMInTl/images/agent-analytics/wordpress/status.png?fit=max\&auto=format\&n=tg0qbLRw_vFMInTl\&q=85\&s=25dfddfd4b78cdb856107eb25eba4762) > [!TIP] > > If the test fails, double-check your Log Ingestion Token and ensure your server can make outbound HTTPS requests to `artemis.api.tryprofound.com`. **7. Step 8** After configuration: 1. Visit a few pages on your public website (not logged into WordPress admin) 2. Return to **Settings** → **Agent Analytics** → **Status** 3. Check that the **Next automatic send** shows a time within the next minute 4. Verify the **Queue size** increases as you browse, then decreases after automatic sending That's it! You have successfully configured Agent Analytics for your WordPress site. Data should begin appearing in your Profound dashboard within minutes. ## Post-Installation Verification To confirm everything is working correctly: 1. **Check the Status Tab**: The queue should periodically drain (every 60 seconds by default) 2. **Monitor Your Dashboard**: Log into your Profound account and verify data is appearing 3. **Review Processing Schedule**: Ensure "Next automatic send" updates regularly ## Troubleshooting ### Logs Not Sending * Verify your Log Ingestion Token is correct and starts with `bot_` * Check that **Enable Logging** is checked in General settings * Ensure WordPress Cron is running (visit your site frontend to trigger it) * Look for any error messages in the Status tab ### Test Event Fails * Confirm your server allows outbound HTTPS connections * Check if a firewall is blocking connections to `artemis.api.tryprofound.com` * Verify your Log Ingestion Token has no extra spaces or characters ### Queue Growing But Not Sending * The automatic sending requires site visits to trigger WordPress Cron * Consider setting up a real cron job for consistent processing * Click **Re-schedule Automatic Sending** if the schedule appears missing ### Wrong IP Addresses * The plugin automatically detects proxy headers from CDNs and managed hosts * If IPs appear incorrect, your host may use non-standard headers * Contact support for assistance with custom IP detection ## Additional Resources * [Security & Privacy Configuration](/agent-analytics/wordpress/security) - Detailed privacy settings and data handling * [Plugin Overview](/agent-analytics/wordpress/introduction) - Complete feature documentation * Contact [support@tryprofound.com](mailto:support@tryprofound.com) for integration assistance # Introduction Source: https://docs.tryprofound.com/agent-analytics/wordpress/introduction Send request logs from your WordPress site to Agent Analytics for advanced traffic analysis > [!WARNING] > > The WordPress plugin can have limited functionality by nature of the WordPress platform. Please read the [limitations](/agent-analytics/wordpress/limitations) page to understand more. ## Overview The Agent Analytics WordPress plugin provides a seamless integration for WordPress sites to send HTTP request logs to the Profound Analytics platform. The plugin is designed with performance and privacy in mind, capturing only public visitor traffic while excluding all administrative and system activity. > **Zero Performance Impact** > > Asynchronous queue system ensures page delivery is never blocked. Adds less than 1ms to request processing. > **Public Traffic Only** > > Automatically excludes WordPress admin, REST API, and system paths. Only tracks real visitor traffic. > **Privacy Controls** > > Redacts sensitive query parameters and excludes login pages. No cookies or client-side tracking. > **Enterprise Ready** > > Supports environment variables for Log Ingestion Tokens and includes circuit breaker protection for reliability. ## How It Works The plugin operates using a lightweight, non-blocking architecture: 1. **Capture** - Essential HTTP metadata is captured during request processing 2. **Queue** - Data is immediately stored in a local database queue with minimal overhead 3. **Batch** - Background process sends logs in efficient batches (up to 1,000 per request) 4. **Retry** - Failed sends are automatically retried with exponential backoff 5. **Protect** - Circuit breaker prevents cascade failures if the API is unavailable ## System Requirements * WordPress 6.0 or higher * PHP 7.4 or higher * MySQL 5.7+ or MariaDB 10.2+ * Outbound HTTPS connectivity * WordPress Cron enabled (or system cron configured) * Sodium PHP extension (recommended for Log Ingestion Token encryption) ## Hosting Compatibility The plugin is tested and optimized for: * **Managed WordPress Hosts**: WP Engine, Kinsta, Flywheel * **Cloud Platforms**: AWS, Google Cloud, Azure * **Traditional Hosts**: SiteGround, Bluehost, GoDaddy * **Local Development**: LocalWP, MAMP, XAMPP > [!TIP] > > The plugin automatically detects and handles reverse proxy headers used by managed WordPress hosts and CDNs to ensure accurate IP detection. ## Next Steps > **[Security & Privacy](/agent-analytics/wordpress/security)** > > Configure Log Ingestion Tokens, privacy settings, and filtering options > **[Plugin Limitations](/agent-analytics/wordpress/limitations)** > > Understand the limitations of the WordPress plugin when used with a CDN for caching > **[Installation Guide](/agent-analytics/wordpress/installation)** > > Step-by-step instructions for installing and activating the plugin *** # CDN Caching Limitations Source: https://docs.tryprofound.com/agent-analytics/wordpress/limitations Understand the limitations of the WordPress plugin when used with a CDN for caching > [!WARNING] > > **Important**: If your WordPress host uses a CDN for caching (Cloudflare, Fastly, etc.), the plugin will **only capture cache misses**, not cache hits. This is a platform limitation, not a plugin limitation. ### The Issue Many managed WordPress hosts (WP Engine, Kinsta, Flywheel, etc.) place a CDN in front of your WordPress site for performance. When a visitor requests a page: 1. **Cache Miss** → Request passes through to WordPress → Plugin captures the request → Logged successfully 2. **Cache Hit** → CDN serves cached content directly → **Request never reaches WordPress** → Not logged by plugin This means you'll only see a portion of your actual traffic: specifically, the traffic that wasn't served from cache. #### Example In this example, the site is hosted on WordPress Engine with WPE application cache layer enabled. In this example, we are fetching the page for the first time, so it is a cache miss. ```shell theme={null} curl -I "https://my-wp-site.com/some-page" HTTP/2 200 OK ... x-cache: MISS # Cache missed, request reaches WordPress and is logged by the plugin ... ``` On the second request, the page is live in the cache, so it is served from the cache layer and never reaches WordPress. ```shell theme={null} curl -I "https://my-wp-site.com/some-page" HTTP/2 200 OK ... x-cache: HIT: 1 # Cache hit, request never reaches WordPress and is not logged by the plugin ... ``` ### Why This Happens The plugin operates at the WordPress application layer. It can only log requests that actually reach your WordPress server. When a CDN serves cached content, the request terminates at the CDN's edge servers and never makes it to your WordPress installation. **The complete solution** is to use CDN-native log drains, which Agent Analytics already fully supports. CDN logs capture *everything*: cache hits, cache misses, bot traffic, DDoS attempts, the complete picture. ### The Platform Problem Unfortunately, most managed WordPress hosts like WP Engine and Kinsta do not provide customers access to configure their CDN log drains. Profound has contacted these providers to request access for customers, they declined at this time. We are pursuing partnership opportunities with these providers to enable this functionality. ### Impact on Analytics > **What Gets Captured** > > * Initial page visits (cache miss) > * Dynamic/personalized pages that bypass cache > * POST requests and form submissions > * Admin-generated traffic to public pages > * Pages with query parameters (often uncached) > * Requests during cache purge/rebuild periods > **What Gets Missed** > > * Subsequent visits to the same page (cache hits) > * Popular pages with high cache hit rates (90%+ typical) > * Static assets served from CDN (CSS, JS, images) > * Bot traffic filtered or served at CDN edge > * Attacks/DDoS blocked at CDN layer > **Typical Cache Hit Rates** > > * **Well-optimized sites**: 85-95% cache hit rate > * **Average sites**: 60-80% cache hit rate > * **Dynamic/personalized sites**: 20-40% cache hit rate ### Workarounds If you need complete traffic visibility, consider: 1. **Switch to a host that provides CDN control** - Many hosts (AWS, Google Cloud, etc.) allow you to configure your own CDN 2. **Request enterprise CDN access** - Some managed hosts provide log access to enterprise customers 3. **Accept partial data** - For bot detection and abuse monitoring, cache misses are often sufficient since bots typically don't benefit from cache 4. **Use Agent Analytics directly with a supported CDN** - If you have the ability to configure your own Cloudflare, Fastly, or other supported CDN, use our native integrations instead > [!NOTE] > > This limitation is not unique to Agent Analytics. Any WordPress plugin attempting to log HTTP requests faces the same constraint: they can only see what reaches WordPress. The industry standard solution is CDN-native log collection, which we fully support for customers with CDN access. # Security & Privacy Configuration Source: https://docs.tryprofound.com/agent-analytics/wordpress/security Configure data collection, filtering, and privacy settings for the WordPress plugin ## Privacy & Compliance The plugin is designed to work with analytics while respecting user privacy: * **No cookies**: Pure server-side implementation * **No JavaScript**: No client-side tracking code * **Data minimization**: Only HTTP metadata, no content * **Automatic redaction**: Sensitive parameters removed * **Public only**: Admin and user areas excluded > [!WARNING] > > Full IP addresses are collected as they are essential for accurate bot detection and traffic analysis. If your jurisdiction requires IP anonymization, additional configuration may be needed. ## Data Collection The plugin collects standard HTTP request metadata from public pages: ### Required Fields The following fields are **required** for every log entry sent to Agent Analytics: | Field | Format | Max Length | Description | | - | - | - | - | | `timestamp` | ISO 8601 | - | UTC timestamp of the request | | `method` | String | 10 chars | HTTP method (GET, POST, etc.) | | `host` | String | 255 chars | Request hostname | | `path` | String | 2048 chars | URL path (without query string) | | `status_code` | Integer | 100-599 | HTTP response status code | | `ip` | String | 45 chars | Client IP address (supports IPv4/IPv6) | | `user_agent` | String | 1024 chars | User agent string | > [!NOTE] > > All required fields must be present for successful log ingestion. Missing fields will result in validation errors on the API side. ### Optional Fields These fields are included when available but not required: | Field | Format | Max Length | Description | | - | - | - | - | | `query_params` | Object | 100 keys | Query string parameters (after redaction) | | `referer` | String | 2048 chars | HTTP referer header | | `bytes_sent` | Integer | - | Response size in bytes | | `duration_ms` | Integer | - | Request processing time | > [!NOTE] > > The plugin **does not** collect: page content, form data, WordPress user information, admin activity, database queries, or any server-side application data. ## Automatic Path Filtering ### Always Excluded Paths The following paths are **automatically excluded** from logging and cannot be overridden: ``` wp-admin # All admin pages and subdirectories wp-login.php # Login page wp-cron.php # Cron jobs admin-ajax.php # Admin AJAX calls xmlrpc.php # XML-RPC interface wp-json/wp/* # WordPress core REST API ``` > [!WARNING] > > These exclusions use substring matching, so they work regardless of WordPress installation directory (e.g., `/blog/wp-admin/` is also excluded). ### Request Type Exclusions The plugin automatically skips: * **Admin-referred requests**: Any request with a referer containing `wp-admin` * **REST API calls**: Requests with `rest_route=/wp/*` query parameter * **CLI operations**: WP-CLI commands * **Edit context**: REST requests with `context=edit` parameter ### Path Filtering Priority Paths are evaluated in this order: 1. **Built-in exclusions** (wp-admin, wp-login.php, etc.) 2. **Custom deny paths** (user-configured patterns) 3. **Referer check** (requests from wp-admin) 4. **REST API check** (WordPress core API) First match wins - if any check matches, the request is excluded. ## Query Parameter Redaction ### Default Redacted Parameters The following query parameter keys are automatically redacted (replaced with `[REDACTED]`): ``` password # Password fields pass # Alternative password fields token # Authentication tokens secret # Secret keys card # Credit card fields cc # Credit card abbreviation ssn # Social security numbers ``` > [!NOTE] > > Redaction uses substring matching. Any parameter containing these strings will be redacted (e.g., `user_password`, `api_token`, `card_number`). ### Redaction Example Original query string: ``` ?username=john&password=secret123&product=widget&api_token=abc123 ``` After redaction: ```json theme={null} { "username": "john", "password": "[REDACTED]", "product": "widget", "api_token": "[REDACTED]" } ``` ## Log Ingestion Token Security ### Storage Methods The plugin supports three methods for Log Ingestion Token configuration, in order of security preference: **Environment Variable (Most Secure)** Add to your server environment: ```bash theme={null} WP_ENV_AGENT_ANALYTICS_API_KEY=bot_PROFOUND_LOG_INGESTION_TOKEN ``` Or in `wp-config.php`: ```php theme={null} define('WP_ENV_AGENT_ANALYTICS_API_KEY', 'bot_PROFOUND_LOG_INGESTION_TOKEN'); ``` **WordPress Constant** Add to `wp-config.php`: ```php theme={null} define('AGENT_ANALYTICS_API_KEY', 'bot_PROFOUND_LOG_INGESTION_TOKEN'); ``` **Database (Encrypted)** Enter via WordPress admin. The key is: * Encrypted using Sodium library (if available) * Falls back to WordPress salts for encryption * Stored in `wp_options` table * Masked in UI (only last 4 characters shown) > [!WARNING] > > For production environments, use environment variables or constants. Database storage should only be used for testing or when file access is restricted. ## IP Address Handling ### Detection Order The plugin attempts to detect the real client IP in this order: 1. `HTTP_X_FORWARDED_FOR` - First IP in the list (for proxies/load balancers) 2. `HTTP_CF_CONNECTING_IP` - Cloudflare's real IP header 3. `HTTP_X_REAL_IP` - Alternative proxy header 4. `HTTP_TRUE_CLIENT_IP` - Cloudflare Enterprise header 5. `REMOTE_ADDR` - Direct connection (fallback) > [!NOTE] > > The plugin automatically handles reverse proxies used by managed WordPress hosts (WP Engine, Kinsta, etc.) and CDNs (Cloudflare, Fastly). ### IP Privacy Considerations * **No anonymization**: Full IP addresses are captured for accurate bot detection * **Required for service**: IP data is essential for geographic analysis and reverse DNS lookups * **GDPR compliance**: Consider your legal requirements for IP data collection ## Configuration Options ### General Settings | Setting | Default | Description | | - | - | - | | **Enable Logging** | Off | Master switch for log collection | | **API Endpoint** | `https://artemis.api.tryprofound.com/v1/logs/wordpress` | Destination for logs | | **Batch Size** | 500 | Number of logs per send (50-1000) | | **Send Interval** | 60 seconds | How often to process queue (30-600 seconds) | ### Privacy Settings | Setting | Default | Options | Description | | - | - | - | - | | **Skip Admin** | On | On/Off | Exclude `/wp-admin/` requests | | **Skip Cron** | On | On/Off | Exclude cron job requests | | **Skip AJAX** | On | On/Off | Exclude admin AJAX calls | | **Skip REST** | Off | On/Off | Exclude ALL REST API requests (not just core) | | **Redact Query Keys** | `password,pass,token,secret,card,cc,ssn` | Comma-separated list | Parameters to redact | ### Advanced Settings | Setting | Default | Description | | - | - | - | | **Custom Deny Paths** | Empty | Newline-separated path patterns (supports wildcards) | | **Max Queue Size** | 100,000 | Maximum logs to store before dropping old entries | | **Retention Days** | 7 | Days to keep unsent logs | | **Circuit Breaker Threshold** | 3 | Consecutive failures before pausing | | **Circuit Breaker Cooldown** | 30 minutes | Pause duration after threshold reached | ## Custom Path Filtering ### Wildcard Pattern Examples Add custom path exclusions using these patterns: ``` /private/* # Exclude all paths starting with /private/ */temp/* # Exclude paths containing /temp/ *.pdf # Exclude all PDF files /api/v1/internal/* # Exclude internal API endpoints staging.* # Exclude staging subdomains ``` ## Data Retention ### Plugin-Side Retention * **Queue entries**: Deleted after successful send * **Failed entries**: Retried up to 6 times with exponential backoff * **Old entries**: Auto-cleaned after retention period (default 7 days) * **Maximum queue**: Oldest entries dropped when limit reached (100,000) ### API-Side Processing * **Successful logs**: Processed immediately by Agent Analytics * **Validation errors**: Logged but entry still deleted from queue * **Authentication failures**: Queue paused, circuit breaker activated ## Performance Characteristics > **Request Impact** > > * **Processing overhead**: \< 1ms per request > * **Memory usage**: Minimal (single array per request) > * **Database operations**: One INSERT per request > * **No output buffering**: Does not delay response delivery > **Background Processing** > > * **Send interval**: Every 60 seconds (configurable) > * **Batch size**: Up to 500 logs per send (configurable) > * **Timeout**: 5 second maximum per batch > * **Queue limit**: 100,000 entries maximum > **Reliability Features** > > * **Automatic retry**: Exponential backoff on failures > * **Circuit breaker**: Pauses after 3 consecutive failures > * **Queue persistence**: Logs preserved during outages > * **Lock mechanism**: Prevents concurrent processing ## Security Best Practices * Store Log Ingestion Tokens in environment variables rather than the database for production sites. * Ensure all sensitive areas of your site are excluded from logging. * Check the Status tab regularly to ensure logs are sending properly. * Use the "Send Test Event" feature to verify connectivity without affecting real data. * Ensure your WordPress site uses HTTPS to protect data in transit to your server. > [!NOTE] > > If you discover any security issues or need assistance with configuration, please contact [support@tryprofound.com](mailto:support@tryprofound.com) immediately. # About Agents Source: https://docs.tryprofound.com/agents/about What Profound Agents are, the problem they solve, and their key features > [!NOTE] > > **Available on**: all plans > > **Find it in**: Workspace > Agents Agents let you hand recurring marketing work to Profound. You describe the job in plain English, give the Agent the tools it needs, and decide when it runs: on demand, on a schedule, or when something happens in your data, on the web, or in your apps. AI Marketer (Aim) builds Agents for you from a description. When you need full manual control over every step, use Workflows, the node-based automations you build in the Workflow Builder. You can also combine the two: an Agent can run a Workflow for the part of a task that must run the same way every time. > [!NOTE] > > If you're looking for information on the legacy node-based Workflow Agents, visit [About Workflows](/agents/workflows/about-workflows). ## The problem Agents solve Profound shows you where your brand is visible in AI search, which sources answer engines cite, how they talk about you, and where they get the facts wrong. Before Agents, acting on those insights meant manual work: pulling numbers into spreadsheets, briefing a writer, drafting outreach, and checking back next week to see if anything changed. Agents take that work on. An Agent can draft and optimize content for the topics where you're losing ground, write outreach to a source that repeats an inaccurate claim or drags your sentiment down, and send a report every Monday without anyone opening a dashboard. Agents work with the tools your team already uses. Combine Profound data with insights from services like G2 or Google Analytics, save the results as Documents and Sheets in Profound, or publish them directly to your content management system (CMS). Learn more in [Tools in Agents](/agents/tools-in-agents). ## Key features ### One page to create, edit, and run Each Agent has a single page. On the left is a chat with Aim, where you run the Agent and ask for changes. On the right is the Agent's settings panel. Select **Run history** or **Artifacts** at the top of the page to see past runs and the files the Agent produced. The changes you make apply to the Agent right away, and every run uses the current version. ### Agent configuration The settings panel holds everything the Agent needs to run: triggers, inputs, instructions, outputs, tools, context, and advanced settings. Instructions are the body of the Agent: what to do, in what order, and what to avoid. You write them in a full text editor that supports Markdown, so you can use headings, lists, and code blocks. Type **/** to insert tools, inputs, outputs, documents, Skills, Workflows, and other items, or **@** to mention items the Agent already has. An Agent can also run a Workflow you've built as one of its steps, for parts of the task that must give the same result every time. Switch the **Instructions** card to **Execution steps** to see the list of steps Aim works out from your instructions. Learn more in [Building blocks of an Agent](/agents/building-blocks-of-agent). ### Run and refine in chat Select **New run** to run the Agent. The run happens in the Agent's own chat, so you can watch the reasoning, the tool calls, and the results as they appear, and then ask follow-up questions about them. To change how the Agent works, describe the change in the same chat and Aim updates the Agent. Every run is saved under **Run history**. ### Automatic runs on triggers Triggers start a run without anyone selecting **New run**. The available kinds are Schedule (a recurring time), a connected app (an event in that app, such as a new message in a Slack channel), Monitor (a change on the web, such as a competitor publishing a page), and Profound data (a metric crossing a threshold, such as a 10% drop in Visibility Score or a rise in inaccurate FactCheck claims). Learn more in [Triggers in Agents](/agents/triggers-in-agents). ### Sharing and version history Agents are private by default. Select **Share** to invite teammates with **Can view** or **Can edit** access, or set **General access** to everyone in your organization. Profound saves versions of the Agent as it changes. Open **Version history** from the **...** menu to review earlier versions and restore one. ### Templates Templates are Agents that Profound built for common jobs, such as weekly reports, content briefs, FAQ optimization, and brand mention digests. Select **Templates** on the Agents page to browse them. To share your own Agent as a template, submit it for your organization or for all Profound customers. Profound reviews every submission before it appears in the template gallery. ## Next steps * Follow [Get started with Agents](/agents/getting-started) to build your first Agent. * Learn about the [building blocks of an Agent](/agents/building-blocks-of-agent). * Read the [Agents FAQ](/agents/faq). # Agents and Workflows: when to use which Source: https://docs.tryprofound.com/agents/agents-vs-workflows How Agents and Workflows differ, when to use each, and how to run a Workflow inside an Agent Automate a task in Profound with an [Agent](/agents/about), a [Workflow](/agents/workflows/about-workflows), or both. Both live on the Agents page in Profound, both run on a schedule or on demand, and both produce Documents, Sheets, and other outputs. To see only one kind on the Agents page, use the **Type** filter. ## What's the difference? Agents take written instructions, connected tools, and triggers, and AI Marketer (Aim) works out the steps on each run. Workflows are automations you build yourself in the Workflow Builder as a chain of nodes that runs the same way every time. The main difference is control. With Agents, you describe what you want to achieve and leave the implementation details to Aim. With Workflows, you build every step yourself and control the order of steps, the tools, and the inputs and outputs. ## When to use which? Use an Agent for most tasks. If you're new to Agents, it helps you skip the implementation details and focus on the task you want your Agent to accomplish. Use a Workflow when you need the same output every run, when a step must run code or call an API in a precise way, or when you need granular control over which steps run and in what order. Workflows also tend to cost fewer credits for high-volume tasks. An Agent reasons through each step, and that reasoning uses credits. If you need both, combine them: build an Agent and have it run a Workflow for the part that must stay fixed. ## Use a Workflow inside an Agent An Agent can hand part of its run to a Workflow. The Agent handles the parts that need judgment, such as deciding what to look at, interpreting results, and writing, and the Workflow handles the parts that must run the same way every time. ### When to combine them * **A step needs fixed logic.** For example, a calculation, a scoring model, code, or an API call that must run the same way on every run. * **You already have a Workflow that works.** Reuse it as a step instead of rebuilding that part in the Agent's instructions. * **You need an integration that Agents can't use as a tool yet.** Build a Workflow with that integration and have the Agent run it. * **You want an Agent's triggers for an existing Workflow.** Start the Workflow from a monitor, an app event, or a Profound data change by running it from an Agent. ### Add a Workflow to an Agent 1. Make sure the Workflow is published. Only published Workflows can be added to an Agent. 2. Open the Agent and go to **Instructions** in the settings panel. 3. Place the cursor in the step where the Agent should run the Workflow, type **/**, and open **Agents**. Pick the Workflow from the list, or type its name to search. 4. The Workflow appears in the instructions as a pill with its name. Write around it what the Agent should give the Workflow and what to do with its results, for example, "For each topic from the input, run \[Workflow]. Then compare the results and write a summary." Or ask Aim in the Agent's chat to add it, for example, "Use my Competitor Snapshot Workflow to pull the numbers." To remove a Workflow from the Agent, hover over its pill in the instructions and select the **×**. ### What happens during a run * When the Agent reaches the step, it starts a run of the Workflow and fills in the Workflow's inputs from the task. * The Workflow's run shows in the Agent's chat with its status. Select **Open** to see the run in the Workflow, including what each node returned. The run also appears in the Workflow's own run history. * If the Workflow includes a human review step, the run pauses until someone reviews the content. * When the Workflow finishes, the Agent uses its results in the next steps. ### Requirements and limits * **Access:** anyone who runs the Agent, including the person who set a trigger, needs access to the Workflow. When you share the Agent, share the Workflows it uses too. * **Credits:** the Workflow's run uses credits the same way it does when you run it on its own. * **Agents can't run other Agents.** Only Workflows can be added as steps. ## Side-by-side comparison | | Agent | Workflow | | - | - | - | | **How you build it** | Describe the goal and the tools in plain English. Aim drafts the Agent, and you refine it in chat or edit the instructions. | Lay out each step as a node on a canvas, then configure and connect the nodes. | | **How it runs** | Aim reasons through the steps on each run. | Follows the same fixed path every time. | | **When the input doesn't match the expectation** | Works around it during the run and tells you what it did. | Stops or returns an error at the node that failed. | | **Output** | Can differ between runs, within the guardrails you set. Wording and steps can differ between runs. | Identical structure every run. | | **Seeing the work** | Every run is a chat: you see why each step happened, and the run is saved. | You see what each node returned. | | **Tools and integrations** | Tools: connections to accounts in services like G2, Notion, Linear, or WordPress. Profound data is built in. | Integrations: nodes for each service, Profound data, code, and API calls. | | **How it starts** | On demand, or on a Schedule, Monitor, Profound data, or app trigger. | On demand, on a schedule, or as a step in an Agent run. | | **Using the other** | Can run published Workflows as steps. | Can't run Agents. | | **API and Model Context Protocol (MCP)** | Not yet supported. Agents run in the Profound platform. | Supported through the Profound API and MCP. | | **Credits per run** | Higher: reasoning on every step uses credits. | Lower for the same task. | | **Best for** | Recurring tasks: monitoring, reporting with commentary, research, and drafting. | High-volume tasks that must be identical, code and API steps, and deterministic data operations. | # Building blocks of an Agent Source: https://docs.tryprofound.com/agents/building-blocks-of-agent The triggers, inputs, instructions, outputs, tools, context, and settings that make up an Agent An Agent is a single document made of a body of instructions and the properties it needs to run: triggers, inputs, outputs, tools, context, and settings. An Agent can also run Workflows you've built as steps. You find them on the Agent's settings panel, in this order: **Run triggers**, **Inputs**, **Instructions**, **Outputs**, **Tools**, **Context**, and a collapsed **Advanced settings** section. Edit them directly, or describe the change to Aim in the Agent's chat. Changes apply to the Agent right away. ## Inputs Information a person provides each time they run the Agent, such as a URL, a topic, or a client name. Most Agents take an input, but they don't have to: an Agent that always does the same job, like getting data from a connected tool, needs none. Each input has a type, a label, and an optional description, and you can mark it as required (inputs are optional by default). When someone runs the Agent, it asks for the inputs before it starts. Input types include text, numbers, URLs, dates and date ranges, lists, dropdowns, true/false values, Documents, Sheets, file uploads, and Profound data: assets, categories, topics, prompts, regions, and tags. ## Instructions The body of the Agent: what it should do, in what order, which tools and Workflows it should use, and any other guidance you have for the Agent. Aim drafts the instructions when you describe the Agent, and updates them when you ask for changes. To ask Aim about part of the instructions, select the text and choose **Ask in chat**. Switch the **Instructions** card to **Execution steps** to see the flow Aim works out from your instructions as a list of steps. To change the steps, ask Aim in the chat, or select **Regenerate steps** after you edit the instructions. ### Add items with / and @ Type **/** anywhere in the instructions to open the insert menu. Pick a category, or keep typing to search. The item appears in the instructions as a pill, so the Agent knows exactly what to use at that step. The categories are: * **Inputs**, **Outputs**, and **Tools**: refer to the Agent's inputs, outputs, and tools in the step that uses them, for example, "Save the summary as \[Output]." * **Agents**: run a published Workflow as a step. Learn more in [Run a Workflow as a step](#run-a-workflow-as-a-step) below. * **Skills**: point the Agent to a Skill at the step where it should apply it. * **Documents**, **Sheets**, and **Knowledge Bases**: point the Agent to reference material in Profound. * **Basic blocks**: formatting for the instructions, such as headings and lists. Type **@** to mention an item the Agent already has, such as a tool or an input. ### Run a Workflow as a step Have the Agent run a Workflow you've built in the Workflow Builder as one of its steps. Use it for the parts of a task that must run the same way every time, such as fixed calculations, code, API calls, or integrations that Agents can't use as tools yet. * **Add a Workflow:** in the instructions, type **/**, open **Agents**, and pick the Workflow, or type its name to search. It appears as a pill with the Workflow's name. Place it in the step where the Agent should run it, for example, "Run \[Workflow] for each topic, then summarize the results." * **What happens during a run:** the Agent starts a run of the Workflow, fills in its inputs, waits for it to finish, and uses its results in the next steps. The Workflow's run shows in the Agent's chat, and you can open it to see what each node returned. * **Remove a Workflow:** hover over its pill in the instructions and select the **×**. Only published Workflows that you have access to are listed. Anyone who runs the Agent needs access to the Workflows it uses, so share them along with the Agent. An Agent can run Workflows, but not other Agents. ## Outputs The artifacts the Agent produces: a Document, a Sheet, an HTML file, a CSV, or a PDF. Declare an output when you want a file at the end of every run. Each output can be visible to **Everyone** or **Private**. Outputs are saved under **Artifacts** at the top of the Agent's page. Some Agents don't produce any artifacts (for example, an Agent that creates a Linear issue whenever your Visibility Score drops). ## Tools The apps the Agent can use while it works, such as G2, Notion, or Linear. Each tool is a connection to an account in that service, so the Agent acts with that account's permissions and asks before it changes anything in the connected service. Your Profound data is available to every Agent without setup. Learn more in [Tools in Agents](/agents/tools-in-agents). ## Triggers Conditions that start an Agent run on their own: * A **Schedule** trigger runs an Agent on a recurring schedule. * An app trigger, listed under the app's name (for example, **Slack**), runs an Agent when an event happens in that app, such as a new channel message. * A **Monitor** trigger watches the web for a change or an event (for example, a competitor publishes a new blog post) and runs an Agent when it happens. Monitors check the web as often as every hour. * A **Profound data** trigger watches your Profound data and runs an Agent when a metric crosses a threshold, including FactCheck metrics such as the inaccurate claim count. The switch next to **Run triggers** turns all of the Agent's triggers on or off at once. Without a trigger, the Agent runs only when someone selects **New run**. Learn more in [Triggers in Agents](/agents/triggers-in-agents). ## Context Material the Agent draws on during every run: Knowledge Bases, Skills, Profound Documents, and Sheets. Select **Add** next to **Context** to attach them, then mention them in the instructions so the Agent knows when to use them. ## Advanced settings Expand **Advanced settings** to set: * The **Default model** and **Default effort**. * **Capabilities**: turn **Browser**, **Web search**, and **Image generation** on or off. Turn off what the Agent doesn't need. * **Behavior**: **Allow self-updates** lets the Agent modify its own instructions; **Allow questions** lets it pause to ask the person running it for input; **When a tool needs approval** sets whether it asks (**Ask**), approves automatically (**Approve**), or refuses (**Deny**). ## Next steps * Learn how to create an Agent in [Get started with Agents](/agents/getting-started). * Learn when to use a Workflow inside an Agent in [Agents and Workflows: when to use which](/agents/agents-vs-workflows). * Check out the [Agents FAQ](/agents/faq). # Agents FAQ Source: https://docs.tryprofound.com/agents/faq Frequently asked questions about Profound Agents and Workflows ## General > **Where are the Agents I built with the Workflow Builder?** > > Everything you built in the Workflow Builder is now called a Workflow. Your existing Workflows are on the Agents page, in the same list as all other Agents. To see only Workflows, filter the list by **Type** > **Workflow**. Nothing changes in the way they run unless you [migrate them to Agents](/agents/how-tos/migrate-workflow-to-agent). > **Do Agents use credits?** > > While Agents are in public beta, running them doesn't use credits. Credit billing for Agents starts after the beta. > > Workflows still use credits as before, including Workflows that an Agent runs as a step. > > Once billing starts, an Agent run uses more credits than the same task run as a Workflow, because the Agent reasons through each step and that reasoning uses credits. To keep your credit use down: > > * **Keep high-volume, fixed tasks as Workflows.** Run them on their own, or as a step inside an Agent so the Agent only reasons about the parts that need judgment. > * **Check how often triggers fire.** Every triggered run is a full run. An hourly monitor, for example, can start up to 24 runs a day. > * **Match the effort to the task.** For simple, repetitive tasks, set a lower **Default effort** under **Advanced settings**. > > Learn more in [Profound usage pricing: Credits](/getting-started/credits). > **Can I run an Agent across many inputs at once instead of one at a time?** > > No. Bulk runs with Sheets are currently supported only for Workflows. The Workflows you built in the Workflow Builder can still run in Sheets as normal. > **Is my Agent data used to train models?** > > No. All data in Agents is contractually prohibited from being used by third-party AI providers (such as OpenAI, Anthropic, or Perplexity) to train or improve their underlying models. > **Will I get the same output every run?** > > No. An Agent reasons through the task each time, so wording and steps can vary between runs. If you need certain things to stay the same (format, data sources, tone of voice), tell Aim in the Agent's chat. If you need identical output and the same sequence of steps on every run, use a Workflow, either on its own or as a step inside an Agent. > **Do I need to publish or test an Agent before it runs?** > > No. Changes you make to an Agent apply right away, and every run uses the current version. There are no separate test runs: run the Agent with **New run**, check the result in its chat, and ask Aim for changes if you need them. > **Why isn't my trigger firing?** > > Check the following in the Agent's settings panel: > > * **The switch next to Run triggers is on.** When it's off, all of the Agent's triggers are paused. Only the person who created a trigger can switch it. > * **The trigger is listed under Run triggers.** A trigger described only in the instructions, such as "every Monday", doesn't fire. > * **For Slack triggers, the Profound Slack app is in the channel.** The channel list only shows channels the app has joined. > * **The Agent has been created.** An Agent that's missing a name or instructions shows as a draft, and its triggers stay paused until it's complete. Hover over a paused trigger to see why. > **Why does the Agent ask permission for a tool again on a triggered run?** > > Each run is its own chat, and you grant tool permissions per chat, so **Allow once** or **Allow for this task** doesn't carry over. To stop the prompts for a tool action, select **Always allow** on the approval card, or set the action to **Allow** in the tool's **Tools & permissions** settings. To change this for the whole Agent, set **When a tool needs approval** under **Advanced settings** to **Approve**. > **Can I create or run Agents through the API or MCP?** > > Not yet. Workflows work with both the Profound API and MCP. Agents currently work only in the Profound platform. > **Who can see my Agent?** > > Only you, by default. Select **Share** to invite teammates with **Can view** or **Can edit** access, or set **General access** to everyone in your organization. Shared Agents appear under **Shared with me** for the people you share them with. Runs started by a trigger are visible to the person who set the trigger. > **A teammate changed my Agent. Can I undo it?** > > Yes. Open **Version history** from the **...** menu on the Agent's page, review earlier versions, and select **Restore** to bring one back. > **How do I stop an Agent from running on its own?** > > Turn off the switch next to **Run triggers** in the Agent's settings panel to pause all of its triggers, and turn it back on to resume. To stop a single trigger, remove it from **Run triggers**. > **Can I share an Agent as a template?** > > Yes. In the **...** menu, select **Submit as template**, pick a category, and choose who can use it: your organization or all Profound customers. Profound reviews every submission before it appears. Track your submissions under **My template submissions**. ## Agents vs Workflows > **Which should I use, an Agent or a Workflow?** > > Agents built with Aim work for most tasks, so we recommend using them. When you need the same steps on every run, or full control over the steps and their order, use a Workflow. You can also combine them: an Agent can run a Workflow as one of its steps. Learn more in [Agents and Workflows: when to use which](/agents/agents-vs-workflows). > **Can an Agent run a Workflow?** > > Yes. In the Agent's instructions, type **/**, open **Agents**, and pick a published Workflow. During a run, the Agent starts the Workflow, fills in its inputs, and uses its results in the next steps. You can follow the Workflow's run in the Agent's chat and open it to see what each node returned. Learn more in [Agents and Workflows: when to use which](/agents/agents-vs-workflows). > **Why doesn't my Workflow appear in the list?** > > Only published Workflows that you have access to are listed. Publish the Workflow in the Workflow Builder, or ask its owner to share it with you. > **My teammate can't run an Agent that uses a Workflow. Why?** > > Anyone who runs the Agent needs access to every Workflow it uses. Share the Workflow with them, too. > **Can an Agent run another Agent?** > > No. An Agent can run Workflows as steps, but not other Agents. > **Do I have to migrate my existing Workflows to Agents?** > > No. Your Workflows keep running as they are, so you don't have to migrate any of them. To use a Workflow with an Agent's triggers or reasoning, add it to an Agent's instructions and the Agent runs it as a step. > **My migrated Agent behaves differently from the Workflow. Is that expected?** > > Yes. When you migrate a Workflow, Aim writes instructions based on it and then reasons through them instead of following the nodes, so the results are close but not identical. Run the migrated Agent and adjust the instructions before you rely on it. Your original Workflow stays unchanged. See [Migrate a Workflow to an Agent](/agents/how-tos/migrate-workflow-to-agent). > **Why would I migrate a Workflow to an Agent?** > > Migrate a Workflow if you need: > > * Easier updates: describe the change in the Agent's chat, and Aim makes it. > * Flexibility with unexpected inputs, or a fix for a Workflow that keeps breaking: the Agent reasons through the run and works around common issues. > * Triggers beyond a schedule. Learn more in [Triggers in Agents](/agents/triggers-in-agents). > **Will the Workflow templates be available as Agent templates?** > > Profound is rebuilding the Workflow template library as Agent templates. To browse templates that aren't rebuilt yet, open the Templates page and switch the type filter from **Agents** to **Workflows**. ## Content creation > **Do Agents implement content updates automatically, or do they only provide recommendations?** > > Both are possible, and you control which approach your Agents take. Agents can generate recommendations and surface them for human review before any content is published, or publish directly to your content management system (CMS) without a manual approval step. Most teams start with a review step and automate publishing once they're confident in the output quality. > **Can Agents generate content briefs and articles based on identified gaps?** > > Yes. A common use case for Agents is to pull Profound visibility data or run a Google Search query, identify gaps or underperforming topics, and then generate content briefs or full articles. The Agent can then pause for a human review or publish the content directly to your CMS. > **Do the content generation tools use public chat apps or connections?** > > No. All content generation in Agents goes through secure, enterprise-tier API connections rather than public-facing consumer apps, such as the public ChatGPT or Gemini apps. ## Tools and integrations > **Does Profound integrate with my CMS so I can publish content automatically?** > > Yes. Agents can publish to WordPress, Webflow, Contentful, and Sanity through tools, and Workflows support more CMS platforms through integrations. To publish to a CMS that's only available to Workflows, have your Agent run a Workflow that publishes there. Learn more in [Integrations vs connectors: what's the difference?](/integrations/integrations-vs-connectors). > **Does Profound integrate with Shopify?** > > Agents don't support Shopify as a tool yet. In Workflows, you can push data to and pull data from Shopify with an API call, which brings product content, catalog data, or e-commerce signals into your answer engine optimization (AEO) work. To use that data in an Agent, add the Workflow to the Agent's instructions. Native Shopify support is planned for a future release. > **Does the platform integrate with Google Analytics or Looker Studio?** > > Agents support Google Analytics as a tool: add it to an Agent to pull Google Analytics 4 (GA4) data into a run. Looker Studio isn't available as a tool. As a workaround, connect your Agent's outputs to your Looker Studio reporting pipelines. > **Does the platform integrate with Reddit?** > > There's no direct Reddit integration, but several Workflow templates cover Reddit analysis and engagement, such as the Reddit Insights Generator and Reddit Comment Generator. They identify top-cited Reddit threads, surface key discussion themes, and generate on-brand comments. ## Workflows > **What models power the Prompt LLM node? Can I bring my own API keys?** > > The Prompt LLM node supports a variety of models, including the latest from Anthropic, OpenAI, and AWS Bedrock. Select any available model. Bringing your own API keys isn't supported. # Get started with Agents Source: https://docs.tryprofound.com/agents/getting-started Build your first Agent with AI Marketer (Aim), run it, and refine it in chat This guide takes you from an empty Agents page to an Agent that runs on its own. You describe the task, let AI Marketer (Aim) build the Agent, run it, and refine it in the same chat. ## Before you start * **Pick a task with a clear outcome.** A weekly summary of a Visibility Score change, a content brief from a keyword, and a digest of new brand mentions are all good use cases for Agents. * **Decide how the Agent should run:** on demand, on a schedule, or when something happens on the web or with your Profound data. Change this at any time. * **Check for Workflows you can reuse.** If a Workflow already handles part of the task, the Agent can run it as a step instead of repeating that work. ## Build an Agent **1. Start a new Agent** In the Profound platform, go to **Workspace > Agents** in the left sidebar and select **Create**. Or select **+** next to **Agents** in the sidebar. The **Create an agent** page opens with an empty Aim chat. Templates are listed below it under **Use a template**. To build a Workflow instead, select the arrow next to **Create**, then **Workflows** > **New Workflow**. **2. Describe the Agent** Write what the Agent should do, when, and where the result goes. One or two sentences are enough. For example: ```txt wrap theme={null} Every Monday, check whether our Visibility Score dropped week over week for the AI Visibility Products category and save a short summary as a Document. ``` If a Workflow should handle part of the job, name it in your description, for example, "Use the Competitor Snapshot Workflow to pull the numbers, then write the summary." Send the message, and Aim starts working. **3. Answer the questions** Aim asks for anything it can't infer from your description. In the example above, it may ask what time on Monday to run and how detailed the summary should be. The questions appear in the message box, one at a time. Select the option Aim suggests, select **Skip** to let Aim choose for you, or type your own answer in the **Other...** field. Select **Next** to move on and **Submit** after the last question. When Aim has a name and instructions for the Agent, it creates the Agent and shows an **Agent created** message. The Agent's page opens with the chat on the left and the Agent's settings on the right. **4. Review the Agent** The settings panel lists the Agent's building blocks: **Run triggers**, **Inputs**, **Instructions**, **Outputs**, **Tools**, **Context**, and **Advanced settings**. Learn more about them in [Building blocks of an Agent](/agents/building-blocks-of-agent). Review each one. To change something, edit it directly or describe the change in the chat. Changes apply to the Agent right away: there's no separate publish step. To have the Agent run one of your Workflows as a step, type **/** in the instructions, open **Agents**, and pick the Workflow. Learn more in [Agents and Workflows: when to use which](/agents/agents-vs-workflows). **5. Run the Agent** Select **New run** at the top of the page, or above the message box. If the Agent has inputs, a short form opens in the message box: fill in each input, then select **Start run**. The run happens in the Agent's chat. You see each step, each tool call, and the result as they happen. When the run finishes, ask follow-up questions about the results, or describe what to change in the Agent and Aim updates it. Run the Agent again after each change to check the output. If the run button is unavailable because some of the tools the Agent needs aren't connected, connect the missing tools in the **Tools** section first. **6. Review runs and artifacts** The Agent's page keeps a record of its work. Select either option at the top of the page: * **Run history**: every run, manual or triggered. Select a run to reopen it in the chat. * **Artifacts**: the Documents, Sheets, and files the Agent produced. **7. Refine the Agent** Use what you learned from the first runs to improve the Agent. There are two ways to do it: * **Edit the configuration yourself.** Change the instructions, inputs, outputs, tools, or context directly in the settings panel. * **Give feedback in the chat.** Describe what you'd like to be different, and Aim updates the Agent. For example, "Pull in my brand kit to better align with my brand's tone of voice." Changes apply right away. Select **New run** to check the result, and repeat until the output is what you need. **8. Add triggers and share** To have the Agent run on its own, add a trigger under **Run triggers** in the settings panel and make sure the switch next to it is on. Learn more in [Triggers in Agents](/agents/triggers-in-agents). To give teammates access, select **Share** at the top of the page. ## Starting from a template Templates are a quick way to get started with Agents. Select **Templates** at the top of the Agents page to open the **Templates** page. Filter templates by category or search for one. Templates also appear under **Use a template** on the **Create an agent** page. Select a template to see its description, **Steps**, and **Instructions**. Select **Use template**, and Aim builds your own private copy of the template in a new chat and helps you set it up. Connect any tools it needs, and adjust it however works best for you. ## Finding your Agents The Agents page lists your Agents. Use the **Recents**, **My Agents**, and **Shared with me** tabs to switch between Agents you used recently, Agents you created, and Agents shared with you. Filter by **Created by**, **Status** (Published or Draft), or **Type** to show only Agents or only Workflows, change the **Sort** order, or select **Search** to find one by name. Each row shows the Agent's name, owner, and an icon that shows whether access is private or shared. Incomplete Agents have a **Draft** label. Select the star on a row to add an Agent to your favorites; favorites appear at the top of the list. # Tools in Agents Source: https://docs.tryprofound.com/agents/tools-in-agents The apps an Agent can use, how to add them, and how tools differ from integrations and connectors Tools are the apps an Agent can use while it works: read a Notion page, create a Linear issue, or publish a post to WordPress. Each tool is a connection to an account in that service, so the Agent does only what that account can do. Your Profound data is available to every Agent without any setup. ## Available tools The external tools currently available are: | Category | Tools | | - | - | | Project management and issue tracking | Asana, Atlassian, Linear | | Content management (CMS) | Contentful, Sanity, Webflow, WordPress | | Marketing automation and customer messaging | Customer.io, Customer.io (EU), HubSpot, Klaviyo, Knock | | Web search, crawling, and SEO data | DataForSEO, Exa, Firecrawl, Google Search Console, Parallel | | Customer support | Pylon | | Reviews and market intelligence | G2 | | Analytics | Google Analytics, Hex | | Developer tools and source control | GitHub | | Email and collaboration | Gmail, Google Drive, Microsoft SharePoint, Notion, Slack | | Meetings and workplace knowledge | Gong, Granola, Microsoft Work IQ | | Social media | Ordinal | | Stock media | Getty Images | Profound data (Visibility, Citations, Sentiment, FactCheck, prompts, and topics) is built in and isn't listed among an Agent's tools. It appears in Agent instructions as a Profound pill. This list grows over time, and the tools available to your organization may differ. Open the **Add tool** dialog on an Agent to see what's available to you. To use a service that isn't listed, add it as a custom connector. ## Add or remove a tool To add a tool to your Agent: 1. In the Agent's settings panel, select **Add** next to **Tools**. 2. Pick a tool from the list, or search for it. Tools the Agent already uses are listed under **Connected**, and common ones under **Most used**. 3. Read what the tool lets the Agent do, select **Connect account** and sign in to the service, and then select **Add tool**. If more than one account is connected, choose one under **Which account should the agent use?** A lock icon marks tools that only an admin can connect. Or ask Aim in the Agent's chat to add a tool. For example, "Use Notion to read the brief" adds the Notion tool if it isn't there yet and prompts you to connect it. To remove a tool, ask Aim to remove it, select the trash icon next to it in **Tools**, or select **Remove tool** in the **Add tool** dialog. Then update the instructions so they no longer refer to the tool. The change applies to the Agent right away. ## Tools, integrations, and connectors Profound connects to outside services through tools, integrations, and connectors. **Tools** (also called **connectors**) are what Agents and Aim use. A tool is a connection to a service through its own API or Model Context Protocol (MCP) server, made under your personal account or an organization account. You add tools from an Agent or from Integrations in the platform settings. **Integrations** are what Workflows use. An integration adds Profound-built nodes to the Workflow Builder, one node per action. You set up integrations in Integrations in the platform settings. Some services are available both ways, for example Slack, Contentful, G2, WordPress, or Sanity. Others exist only as Workflow integrations today, such as Gamma. Learn more in [Integrations vs connectors: what's the difference?](/integrations/integrations-vs-connectors). To use a service that's only available as a Workflow integration, build a Workflow that uses it, then add that Workflow to your Agent's instructions. The Agent runs the Workflow as a step. Learn more in [Agents and Workflows: when to use which](/agents/agents-vs-workflows). ### Add a custom connector If a service has a public MCP server but isn't in the list of tools, add it as a custom connector. Your Agents can then use it like any other tool. 1. Go to **Settings** in the organization name menu at the top left of the screen > **Integrations**. 2. Scroll to the bottom of the list and select **Add custom connector**. 3. Enter a **Name** for the connector, for example "Exa Search". 4. In **URL**, paste the public HTTPS URL of the MCP server, for example `https://mcp.example.com/mcp`. 5. Choose the **Connection type** the server uses: **HTTP** or **SSE**. 6. Choose how the connector signs in to the server under **Authentication** (see the options below). 7. Under **Access**, choose who can use the connector: **Only me**, or your organization's name to share it with everyone in your organization. 8. Optionally, open **Appearance settings** to add a **Logo URL** and a **Description**. 9. Select **Add connector**. Profound connects to the server and discovers its tools. Authentication options: * **None**: the server doesn't need credentials. * **Secret**: Profound sends a header, such as an API key, with each request to the server. Enter the header name (for example, `x-api-key`) and the **Secret value**. Select **Add secret** to add more headers. * **OAuth**: you sign in to the service. Enter a **Client ID** and **Client secret** only if the service requires them. Then add the connector to an Agent from the **Add tool** dialog, the same way as other tools. ## FAQ > **Does connecting a tool give Profound access to everything in my account?** > > The Agent can do only what the connected service allows for the connected account, and only what the instructions ask it to do. Actions that change something in the service need your permission during the run, unless you've set them to **Allow**. > > To see your permissions for each tool: > > 1. Go to **Settings** in the organization name menu at the top left of the screen > **Integrations**. > 2. Select a service (for example, G2) to open its page. > 3. Switch to the **Connector** tab. View and edit permissions in the **Tools & permissions** section. Tools are grouped into reading, editing, and destructive tools. Set each one to **Allow**, **Ask**, or **Block**. > > To open these settings from the **Add tool** dialog, select **Manage** next to **Tools & permissions**. Permissions apply to all your Agents. > **Can my teammates use a tool I connected?** > > It depends on the account you used to connect the tool. If it's your personal account, the tool is yours: when you share an Agent, each person who runs it connects the tools they need under their own account. Anyone in your organization can use a tool connected to an organization account. When a tool isn't connected, the Agent can't run until someone connects it in the **Tools** section. # Triggers in Agents Source: https://docs.tryprofound.com/agents/triggers-in-agents Start Agent runs automatically on a schedule, an app event, a change on the web, or a change in your Profound data A run trigger starts an Agent run automatically when its condition is met. The condition can be a schedule, an event in a connected app or on the web, or a change in your Profound data. Add triggers in the Agent's settings panel, or ask Aim in the Agent's chat to add them. ## Trigger types | Trigger | Runs when | Example | | - | - | - | | **Schedule** | A scheduled time arrives | Every Monday at 9:00 AM | | **App** (listed by app name, for example **Slack**) | An event happens in a connected app | A new message is posted in a Slack channel | | **Monitor** | Something changes on the web | A competitor publishes a new blog post | | **Profound data** | A Profound metric meets a condition | Visibility Score drops 10% compared with the last 7 days | Add more than one trigger to an Agent, and it runs when any trigger's condition is met. By default, an Agent has no triggers and runs only when you select **New run**. ## How triggers behave * **One switch turns triggers on and off.** The switch next to **Run triggers** in the settings panel pauses or resumes all of the Agent's triggers at once. It appears once the Agent has at least one trigger. Only the person who created a trigger can switch it. * **Triggered runs use the current version of the Agent.** Changes you make apply to the next triggered run. * **Triggers belong to the person who set them.** Only that person sees the triggered run and its outputs. People the Agent is shared with can run it themselves and see their own runs. Triggers aren't saved in version history. * **Every triggered run is a chat.** Find it under **Run history** at the top of the Agent's page, with any outputs under **Artifacts**. * **Triggered runs can run Workflows, too.** If the Agent's instructions include a Workflow, a triggered run runs it and uses its results, the same as a manual run. The person who set the trigger needs access to the Workflow. ## Add a schedule In the settings panel, select **Add** next to **Run triggers** and point to **Schedule**. Select **Hourly**, **Daily**, or **Weekly** to add a schedule that starts now, or **Custom** to set it up yourself: 1. Set **Starts on** to the first date and time the Agent should run. 2. Choose a **Frequency**: **Doesn't repeat**, **Daily**, **Weekdays**, **Weekend**, **Weekly**, **Monthly**, **Annually**, or **Custom**. For a custom cadence, select **Custom**, set **Repeat every** (for example, 1 week or 4 hours), and select the days under **Repeat on**. 3. Select **Add trigger** to save. The trigger appears under **Run triggers**, named after how often it runs, for example, "Every Monday at 9:00 AM". Select it to edit it, or select **Remove** in the dialog or the trash icon next to it to delete it. To add a schedule in the chat, ask Aim, for example, "Run this Agent every Monday at 9 AM." ## Add an app trigger 1. Select **Add** next to **Run triggers** and point to the app, for example **Slack**. Only connected apps that support triggers appear in the menu. 2. Choose the event, for example **New channel message** or **Reaction added to a message**. 3. Complete the trigger sentence: for Slack, choose which messages or reactions count and select the channel. The trigger saves as soon as the sentence is complete. For the Slack app trigger, add the Profound Slack app to the channel you want to use with an Agent. The channel list only shows channels the app has already joined. Learn more in [Connect Slack to Profound](/integrations/slack/connect-slack-to-profound). ## Add a monitor A monitor watches the web for updates that match a query you write. Profound checks for new matches on the schedule you choose, ignores anything it has already reported, and starts a run only when something new appears. 1. Select **Add** next to **Run triggers** and choose **Monitor**. 2. Optionally, enter a **Name**, for example "Competitor blog monitor". If you leave it empty, the monitor is named "Monitor 1", "Monitor 2", and so on. 3. In the **Query** field, describe what to watch (up to 2,000 characters), for example, "a new post on competitor.com/blog" or "changes to the pricing page at competitor.com/pricing". 4. Choose a **Frequency**: **Every hour** (the default), **Every 2 hours**, **Every 4 hours**, **Every 6 hours**, **Every 12 hours**, or **Every day**. 5. Select **Add trigger** to save. After you save a monitor, you can rename it, but you can't change the query or frequency. To change them, remove the monitor and add a new one. ### Writing a good monitor query * Describe what you're looking for in plain language, the way you'd brief a colleague. * Keep your query clear and specific: include what to watch for and where to watch for it. * Leave out date ranges. The monitor already surfaces only what's new. Prefer the queries in the first column and avoid the ones in the second. | Prefer ✅ | Avoid ❌ | | - | - | | AI startup funding announcements | Find all AI funding news from the last 2 years | | Tesla news and announcements | Tesla news after December 12, 2025 | | New blog posts published on competitor.com | competitor.com blog | ## Add a Profound data trigger 1. Select **Add** next to **Run triggers** and choose **Profound data**. 2. Choose the **Category** and the **Asset** to watch. 3. Build the **Trigger** condition: set **When** a metric **drops by**, **rises by**, **drops below**, or **rises above** a value (in % or a number), **Against** a comparison window (**Last day**, **Last 7 days**, **Last 14 days**, **Last month**, or **Last 3 months**). 4. Narrow the scope with **Filters**: Topics, Platforms, Regions, Tags, or Personas. 5. Set the **Check frequency** (**Daily** by default, or **Weekly**, **Bi-weekly**, or **Monthly**) and select **Add trigger**. Available metrics: * **Visibility**: Visibility Score, Share of Voice, Average Position, and their ranks. * **Sentiment**: positive percentage, negative percentage, and assessment count. * **Citations**: Citation Share, citation count, Citation Rank, and Citation Coverage. * **FactCheck**: Accuracy score, and inaccurate, accurate, and verified claim counts. These appear only when FactCheck is set up for the category. ## Edit, pause, or remove a trigger In the Agent's settings panel, select the trigger under **Run triggers**. Change the settings and select **Save**, or select **Remove** to delete the trigger. To pause all of an Agent's triggers without deleting them, turn off the switch next to **Run triggers**, and turn it back on to resume. To stop an Agent from running on its own permanently, remove its triggers. Trigger changes apply right away. # About Workflows Source: https://docs.tryprofound.com/agents/workflows/about-workflows What Profound Workflows are and how the node-based workflow builder automates the AEO cycle ![Frame 2147259079 (4).png](https://mintcdn.com/profound-37face47/LU_swtbqvG5kIsMS/images/agents/about-1.png?fit=max\&auto=format\&n=LU_swtbqvG5kIsMS\&q=85\&s=678a0812b405ad356725299ca1a190a4) ## Overview Profound Workflows is a modular, node-based Workflow Builder that lets your team automate the full AEO cycle, from pulling live visibility data all the way to publishing optimized content into your CMS. It brings together Profound's AEO data, leading AI models, and the tools your team already uses into a single, connected pipeline. Workflows use cases include: * Running Answer Engine Insights reports and automatically sending them to your team via Slack. * Identifying content gaps and automatically creating optimized content to fill those gaps. * Detecting underperforming content and automatically updating it to perform better in AI search. ## How Workflows work A Workflow is built on a visual canvas made up of nodes. Each node performs a specific task: querying Profound data, prompting an AI model, fetching content from the web, or publishing to a connected platform. Nodes are connected in sequence, and data passes between them as variables. This structure means you can build workflows of any complexity: a simple two-step Workflow that drafts a content brief and sends it to Slack, or a multi-step pipeline that pulls visibility data, identifies content gaps, generates optimized articles, and publishes them directly to your CMS. ## Workflow components Every Workflow is made up of the same building blocks: * **Inputs** — Information you provide each time you start a Workflow. Inputs can include text, Profound data, files, or dropdown selections. * **Nodes** — The steps of your Workflow. Each node performs a specific task, like querying data, generating content, sending a message, or publishing to a CMS. * **Variables** — Every piece of data that flows in and out of a node. Variables can be passed between steps and reused at any point in the workflow. * **Workflow output** — The final result produced after all steps run. This can be generated content, a published article, a Slack notification, or a confirmation that the Workflow ran successfully. ### Conditionals and iterations Workflows support branching logic and loops, so your workflows can handle real-world complexity. **[Conditionals](/agents/how-tos/add-conditionals-to-workflows)** let your Workflow take different paths based on the value of a variable. For example, routing high-visibility content to one workflow and low-visibility content to another, or only publishing content if a quality check passes. **[Iterations](/agents/how-tos/add-iterations-to-workflows)** let your Workflow apply the same sequence of steps to every item in a list. For example, iterate over a list of competitor websites to extract their pricing, then pass that combined output to an LLM node to generate a new pricing page for your site. ### Sheets [Sheets](/sheets/getting-started) lets you run Workflows at scale by supplying a spreadsheet of inputs instead of running a Workflow one item at a time. Upload a CSV or connect a Google Sheet, and Profound processes each row as a separate Workflow run in parallel. This is particularly useful for content operations teams managing large keyword lists, site audits, or bulk content generation projects. # Create a Workflow Source: https://docs.tryprofound.com/agents/workflows/create-workflow Build and run your first Workflow ## Step 1: Open the Workflow Builder 1. Go to **Agents** in the left navigation sidebar. 2. Select **+ Create** on the top right of the screen. 3. In the dropdown menu, select **Workflows > + New Workflow**. The Workflow Builder opens to a blank canvas. ## Step 2: Configure your inputs Every Workflow begins with a **Start** block where you configure Workflow inputs. Inputs are the values you supply each time the Workflow runs: a keyword, a topic, a URL, and so on. Select the **Start** block to open its settings. Add each input you need, give it a clear label (for example, `target_keyword` or `article_url`), choose a type (text, number, list, date range, and so on), and indicate whether it's required. These labels become the variable names you'll reference in later steps. ## Step 3: Build your pipeline Add nodes by clicking **+** on the canvas or dragging nodes from the left sidebar. Each node has a settings panel that opens on the right: configure inputs, reference variables from earlier steps, and label the output so it's available to subsequent nodes. Common starting patterns: * [Visibility Score](/agents/workflows/nodes/data/visibility-score) node → [Prompt LLM](/agents/workflows/nodes/prompt-llm) (generate brief) → [Slack](/integrations/slack/connect-slack-to-profound) message * Google Search node → [Prompt LLM](/agents/workflows/nodes/prompt-llm) (analyze results) → [Generate Article](/agents/workflows/nodes/content-creation/generate-article) → [WordPress](/integrations/wordpress/overview) (publish to website) Add [Conditionals](/agents/how-tos/add-conditionals-to-workflows) to branch your workflow based on variable values. Add [Iterations](/agents/how-tos/add-iterations-to-workflows) to loop a sequence of steps over every item in a list. ## Step 4: Test, publish, and run New Workflows start as drafts. Before publishing, run a test by supplying sample inputs. Each step's output will be visible so you can verify the pipeline behaves as expected. When the Workflow is ready, click **Publish** to make it live. You can then run it manually, trigger it on a schedule, or supply a spreadsheet of inputs via [Sheets](/sheets/getting-started) to process multiple items at once. # Integrations and tools in Workflows Source: https://docs.tryprofound.com/agents/workflows/integrations-and-tools-in-workflows The tools and integrations Workflows can connect to, configured once per organization Workflows connect to the tools your team already uses, so workflow output lands exactly where it needs to go. Integrations are configured once per organization and are then available to any Workflow. > [!TIP] > > Learn more in [Get started with integrations](/integrations/overview). ## CMS integrations A content management system (CMS) is the platform your team uses to create, store, and publish web content: articles, landing pages, product descriptions, and more. Connecting your CMS to Profound Workflows means content generated inside a workflow can be pushed directly into your CMS without any manual copy-and-paste step. The CMS platforms supported by Profound Workflows include: * Basehub * Contentful * Framer * Notion * Payload * Sanity * Webflow * WordPress All CMS integrations follow a common flow: * **Find the integration**. It's usually named after the service you want to integrate: WordPress, Framer, and so on. * **Choose the action** you want to take: list articles, get content, publish content, and so on. * **Add a Workflow node** with the action and fill in the required fields: your site or workspace identifier and any necessary credentials. Follow the instructions on the node setup screen. CMS integrations close the loop between AEO insight and action: use Workflows to identify content gaps, generate optimized articles, and publish them in a single automated pipeline. > [!TIP] > > Multiple CMS accounts can be connected to the same Profound organization. If your team manages more than one site or content environment, configure each separately and select it per Workflow. ## SEO tools Profound Workflows can pull data from traditional SEO platforms, letting you combine search engine performance signals with AEO metrics in a single workflow. This is especially useful for teams that want to prioritize content efforts using both classic keyword data and AI search visibility. ### DataforSEO DataforSEO nodes give you access to a broad set of SEO data signals, including SERP results, keyword data, backlink metrics, and on-page data. Use the DataforSEO integration to: * Retrieve live SERP data for specific queries as part of a content research workflow. * Pull keyword metrics to supplement Profound's AEO data when building content strategies. * Automate competitive research by fetching ranking data and passing it into an AI analysis step. ### Google Search The Google Search node retrieves live search results for a given query and makes that data available to other nodes in your Workflow. It's a lightweight way to bring real-world search context into your workflows without leaving Profound. Use the Google Search node to: * Research what currently ranks for a target keyword before generating a content brief. * Identify the top-ranking pages on a topic so an LLM node can analyze their content and suggest differentiated angles. * Cross-reference Google search results with Profound's AEO data to spot gaps between what ranks in traditional search and what appears in AI responses. To use the node, add it to your Workflow, enter a static query or pass a variable from a previous step, and configure the number of results to return. The output is a structured list of URLs and page titles that can be passed to any subsequent node. ## Communications and productivity Workflows can deliver outputs directly to the tools your team communicates and works in, so results don't sit in a dashboard waiting to be found. Supported integrations: * **Slack** — Notify your team when a Workflow run completes, share AEO performance snapshots, flag content that needs attention, or deliver automated reports on a schedule. * **Gamma** — Generate slide decks, visibility reports, and client-ready presentations in your workspace based on the output of previous Workflow steps. * **Google Drive** — Save content generated by Workflow steps as files in Google Drive, making them accessible to your team. ## Website builders Connecting a website builder to Profound Workflows lets you take AEO insights all the way to publishing new pages, without any manual development step. Use these integrations when your workflow needs to go beyond updating existing content and create or deploy new pages. Supported integrations: * **Vercel** — Generate and deploy new web pages directly from within a workflow, using Profound data and AI-generated content as inputs. ## Custom API and more The **Call API** node lets you connect Workflows to any service that exposes a REST or GraphQL API, including internal tools, data platforms, analytics systems, and third-party services not covered by native integrations. This makes Workflows highly extensible: if a platform has an API, Profound can integrate with it. Additional integrations available through the Call API node include Shopify for e-commerce workflows and Looker Studio for reporting pipelines. # Article Title Suggestion node Source: https://docs.tryprofound.com/agents/workflows/nodes/content-creation/article-title-suggestion Generate an AEO-optimized article title from your topic, audience, and content goals The **Article Title Suggestion** node generates an AEO-optimized, high-quality article title based on your topic, audience, and content goals. Unlike a simple LLM prompt, this node applies a structured, multi-step workflow to evaluate your inputs, apply editorial and SEO best practices, and output a single, strong title crafted for visibility, trustworthiness, and user intent match. Add this node to your Workflows when you need reliable, polished titles that set up your content for success—whether for editorial planning, SEO, or Answer Engine Optimization. ## When to use this node Use Article Title Suggestion for tasks such as: * Quickly generating compelling, search-aligned titles before content production * Developing titles that are optimized for AI answer engines and user prompts * Testing variations of messaging for different audiences or company contexts * Feeding optimized titles into downstream steps (e.g., content briefs or full articles) This node is designed to be used early in a content strategy or creation workflow. ## Node configuration Selecting the Article Title Suggestion node opens its configuration panel on the right side of the Workflow Builder. ### Topic (required) Provide the subject or theme the article should cover, such as: * “Emerging trends in healthcare technology” * “How to optimize your Shopify store for conversion” * “AI visibility strategy for enterprise brands” This is the primary driver of the generated title. ### Content Type Select the type of content the title should be optimized for, such as **General** (default), **Listcle, Blog Post,** and more. The node adjusts tone, structure, and style based on this setting. ### Company Name If provided, the title will account for brand context when relevant. This is useful when creating articles for a specific company blog or brand voice. ### Audience Segment Specify the target audience for the content—e.g., “B2B marketing leaders,” “healthcare professionals,” or “startup founders.” The node uses this to improve alignment, terminology, and specificity. ### Target Prompt Enter the user prompt (as used in AI search or on-platform interaction) that your content should optimize for. This helps ensure that the title is directly tied to the way users pose questions or seek information, for example: * “What is AI visibility and why does it matter for enterprises?” ### Output Label (required) Assign a label for the generated title. This label becomes available to downstream steps, such as: * [Create Content Brief](/agents/workflows/nodes/content-creation/create-content-brief) * [Generate Article](/agents/workflows/nodes/content-creation/generate-article) * [AEO Content Scorecard](/agents/workflows/nodes/content-optimization/aeo-content-scorecard) * Custom Prompt LLM steps ## How the node works behind the scenes Article Title Suggestion runs a multi-step workflow that evaluates your inputs and produces one optimized title. While this process is abstracted into a single step, the internal logic includes: 1. **Input evaluation** * The node checks whether inputs like company name, audience segment, or target prompts are provided. * It adjusts title generation logic accordingly (e.g., more generic if fields are blank). 2. **Context and metadata preparation** * Current-year or temporal context may be added when relevant for accuracy or search alignment. * Input variables are transformed or normalized for consistent title generation. 3. **Title generation logic** * A structured set of editorial, SEO, and AEO rules is applied, such as: * Ensuring clarity and authority * Avoiding exaggerated or misleading phrasing * Matching user intent and search demand * Maintaining strong keyword alignment * Producing titles appropriate for your audience segment 4. **Optimized variant selection** * If multiple internal candidates are produced, the node selects the strongest one based on clarity, engagement potential, and AEO alignment. * Only **one title** is returned to maintain consistency and support downstream workflows. This workflow ensures titles are more consistent and high-quality than ad-hoc LLM prompt outputs. ## Output The output is a **single AEO-optimized article title**, suitable for * Direct use in content production * Passing into a brief or article generation workflow * Use in editorial calendars * SEO or topic clustering workflows ## Example usage ### 1. Create an optimized title before generating a content brief 1. Add the **Article Title Suggestion** node. 2. Provide topic, target prompt, and optional audience and company name. 3. Set an output label (e.g., `title`). 4. Pass `title` into the [Create Content Brief](/agents/workflows/nodes/content-creation/create-content-brief) node. ### 2. Build a content pipeline 1. Article Title Suggestion → [Create Content Brief](/agents/workflows/nodes/content-creation/create-content-brief) → [Generate Article](/agents/workflows/nodes/content-creation/generate-article) 2. Add [AEO Content Scorecard](/agents/workflows/nodes/content-optimization/aeo-content-scorecard) afterward to evaluate the final article. ### 3. Generate multiple titles for testing Duplicate the node with changes to Topic, Audience Segment, or Target Prompt to compare results. ## Best practices * Include a **Target Prompt** when writing for AI-driven search; this increases intent alignment. * Use **Audience Segment** for B2B or specialized verticals to ensure relevancy. * Keep the **Topic** specific enough to guide the node but broad enough to allow creative generation. * Downstream steps should reference the output label directly (e.g., for content brief creation). # Create Content Brief node Source: https://docs.tryprofound.com/agents/workflows/nodes/content-creation/create-content-brief Generate a structured content brief tailored to your topic, audience, and brand The **Create Content Brief** node generates a complete, structured content brief tailored to your topic, audience, and brand. This brief includes recommended angles, headers, research insights, platform considerations, and editorial guidance—built using Profound’s full content research and analysis pipeline. Behind the scenes, this node performs multi-step research, citation analysis, AI-answer pattern detection, and outline generation to produce a brief that is both strategically sound and optimized for AEO. ## When to use this node Use Create Content Brief when you need: * A ready-to-use content brief for writers or downstream article generation * A deep understanding of how AI systems currently answer a topic or prompt * Strategic recommendations informed by real citation patterns * Structured guidance for content teams or LLM-driven article generation * AEO-optimized outlines that map to user intent and on-platform behavior This node is ideal for launching a new article, planning an editorial strategy, or building automated content pipelines. ## Node configuration Selecting the Create Content Brief node opens its configuration panel on the right side of the Workflow Builder. ### Topic (required) The primary subject of the article, such as: * “AI-driven supply chain optimization” * “What is programmatic SEO?” * “How to create an AEO content strategy” This topic anchors the research and shapes the outline. ### Company Name (required) Your company or client name. Used to contextualize the brief in terms of tone, positioning, brand relevance, and so on. ### Company Domain (required) Your company’s website URL (e.g., `https://example.com`). This is used for internal link recommendations and context alignment. ### Article Title If you’ve already generated a title—often via the [Article Title Suggestion](/agents/workflows/nodes/content-creation/article-title-suggestion) node—you may provide it here as a variable. If not provided, the node will still generate a fully informed brief. ### Audience Segment The target audience for the content. Examples: * “Marketing managers at B2B SaaS companies” * “Healthcare procurement teams” * “Small business owners” This influences tone, examples, and depth. ### Content Type The category or format of content to produce. Default is **General**, but other options include **Listicle, Blog Post, How-to**, and so on. ### Target Platforms Select which AI platforms the content should optimize for. Examples include ChatGPT, Perplexity, Google AI Overviews, and others. This ensures the analysis aligns with how specific platforms cite, structure, and present information. ### Target Prompts These are user prompts your content should aim to answer or optimize for, for example: * “What is AI visibility?” * “How does supply chain automation work?” This field enhances intent alignment and platform-specific optimization. ### Citations List any manually provided sources you want the node to incorporate into the research process. This is helpful when working with proprietary or must-use sources. ### Additional Instructions Anything else that should inform the content brief creation, such as special formatting or delivery notes. ### Output Label (required) Assign a descriptive label for the brief, such as: * `content_brief` * `structured_brief` * `brief_output` ## How the node works behind the scenes Although it runs as a single step, the Create Content Brief executes a sophisticated, multi-stage workflow similar to the full Profound Content Creation pipeline. The internal process includes: ### 1. Input normalization and context setting The node prepares all user-provided inputs, including topic, audience, company context, title, prompts, and platforms. It adapts the workflow based on what is or isn’t provided. ### 2. Target prompt and platform mapping If target prompts or platforms are included, the node tailors research and outline strategy toward: * How AI systems currently respond * Which sources they cite * Which answer patterns are most common * Where gaps or opportunities exist ### 3. Citation retrieval and aggregation The node fetches top citations across relevant platforms based on your topic, prompts, or keywords, including: * Frequently cited sources * High-authority domains * Content types used in AI answers * Structural patterns (lists, definitions, frameworks) These citations form the core research dataset. ### 4. Deep research analysis Using the aggregated citations, the node: * Extracts themes * Identifies recurring angles, frameworks, and definitions * Detects gaps between competitor content and user intent * Surfaces authoritative signals and trusted sources * Highlights common misconceptions or ambiguous areas This ensures the brief is grounded in real-world informational ecosystems. ### 5. Content brief assembly The node synthesizes the research into a structured content brief, which typically includes: * **Content summary** — what the article should aim to communicate * **Key angle recommendations** — strategic viewpoints based on research * **Suggested headers & structure** — optimized for readability and AEO * **Research highlights** — distilled insights from citations * **Target audience notes** — tone, complexity, and messaging guidelines * **Platform considerations** — how to align with specific AI platforms * **Target prompt alignment** — ensuring user-intent match * **Internal linking strategy** — recommended internal pages from your domain * **Call-to-action or conversion notes** (when appropriate) ### 6. Final formatting and delivery The node formats the final deliverable as a clean, ready-to-use content brief. ## Output The output is a **complete, polished, and AEO-ready content brief**.\ Writers, editors, and downstream workflow steps (such as [Generate Article](/agents/workflows/nodes/content-creation/generate-article)) can use it immediately. The brief is designed to be: * Structurally sound * Research-backed * Optimized for AI answer engines * Tailored to your audience and brand * Ready for production workflows ## Example usage ### 1. Full content creation pipeline 1. Generate a title using [Article Title Suggestion](/agents/workflows/nodes/content-creation/article-title-suggestion) 2. Pass title into **Create Content Brief** 3. Feed the resulting brief into [Generate Article](/agents/workflows/nodes/content-creation/generate-article) 4. Score the output with [AEO Content Scorecard](/agents/workflows/nodes/content-optimization/aeo-content-scorecard) ### 2. Helpful for editorial workshops Use the content brief to guide collaboration between strategists, writers, and SMEs. ### 3. Automated content operations Run recurring workflows that generate briefs for: * Product categories * New topics in your SEO roadmap * Common user prompts * Competitor queries ## Best practices * Provide a **Company Domain** to enable internal linking insights. * Use **Target Prompts** to boost alignment with AI-answer behavior. * Add **Target Platforms** to tailor the brief to specific citation ecosystems. * Pair with **Answer Engine Insights** for a data-driven pre-brief stage. * Use clear, consistent output labels to chain into downstream nodes. # Generate Article node Source: https://docs.tryprofound.com/agents/workflows/nodes/content-creation/generate-article Produce a publication-ready article tailored to your topic, audience, and brand The **Generate Article** node produces a complete, publication-ready article tailored to your topic, audience, and brand. It is the final step in Profound’s content creation pipeline and is designed to work seamlessly with upstream Workflow nodes such as [Article Title Suggestion](/agents/workflows/nodes/content-creation/article-title-suggestion) and [Create Content Brief](/agents/workflows/nodes/content-creation/create-content-brief). Unlike a single LLM call, this node runs a structured, multi-stage workflow that drafts, evaluates, refines, and brand-aligns the final article. The result is a polished, AEO-optimized piece that is consistent, trustworthy, and ready for editing or direct publication. ## When to use this node Use Generate Article when you need: * A full-length, coherent, well-structured article * Consistent voice and tone that aligns with your company or audience * AEO-aligned phrasing and structure optimized for AI-generated answers * Articles informed by a full content brief or standalone inputs * Automated content pipelines for SEO, editorial teams, or content operations This node is ideal as the final stage in automated or semi-automated content production workflows. ## Node configuration Selecting the Generate Article node opens its configuration panel on the right side of the Workflow Builder. ### Article Title (required) Provide the final working title of the article. This is the anchor for narrative structure, tone, and topical focus. It's most common to pass the output from [Article Title Suggestion](/agents/workflows/nodes/content-creation/article-title-suggestion) into this field. ### Audience Segment Specify who the article is for, for example: * “Retail operations managers” * “Enterprise IT leaders” * “Founders of early-stage startups” This helps adjust tone, vocabulary, and level of explanation. ### Company Name Adds brand context to the writing. Useful when the company should be referenced or when tone alignment matters. ### Content Brief Paste or reference the output of the [Create Content Brief](/agents/workflows/nodes/content-creation/create-content-brief) node. It is used to: * Structure the article based on the brief outline * Incorporate key points, angles, and metadata * Align with recommended headers, insights, and prompts If you don't provide a brief, the node still generates a high-quality article using the title and audience alone, but without the advanced research backing. ### Additional Instructions Any special requirements such as: * Formatting preferences * Markdown or HTML structure * Reading-level constraints * Examples to incorporate * Style guidelines (e.g., “conversational but authoritative”) These instructions override or augment the default behavior. ### Target Prompt If your article must optimize for a specific user query used in AI search, include it here. Example: * “How is AI transforming retail supply chains?” This helps align the introduction, framing, and definitions with answer engine behavior. ### Output Label Name the output variable. Example: `generated_article`. ## How the node works behind the scenes Generate Article executes a multi-step workflow designed for quality, stability, and alignment: ### 1. Input validation and branching The workflow determines whether a **Content Brief** was provided. * **If brief exists:** The node follows the outline closely, using it as the blueprint for structure, sections, and insights. * **If brief is empty:** The node generates an internal outline based on topic and title, ensuring readability and cohesion. ### 2. First-pass drafting Using a high-quality generative model, the node produces the initial draft.\ The draft incorporates: * Title framing * Target audience considerations * Brand context * Brief-based structure (if provided) * Any additional instructions This is the most substantial stage of article creation. ### 3. Draft consolidation If the workflow generates multiple variants or sections, these are merged and processed into a single cohesive article. Variable aggregation ensures: * Consistent narrative voice * Smooth transitions * Unified structure ### 4. Optional refinement and QA logic If certain fields are provided (e.g., extensive instructions or company name), the workflow may run additional logic to adjust tone, expand examples, or reinforce brand positioning. ### 5. Brand alignment pass A final refinement stage ensures the article: * Reads as brand-safe * Maintains proper terminology * Uses the desired voice and perspective * Aligns with AEO-based clarity and trust guidelines This step often employs a lighter model to polish and finalize the text. ### 6. Final output formatting The node outputs the complete article as a single, clean block of text. ## Output The output is a **fully drafted, publication-ready article** that can be: * Published directly * Edited by a human writer * Scored by the [AEO Content Scorecard](/agents/workflows/nodes/content-optimization/aeo-content-scorecard) * Used in automated content distribution workflows The output generally includes: * A compelling introduction * Clear sections and headers * Well-structured explanations * Actionable insights * A conclusion that reinforces the article’s value ## Example usage ### 1. Full content pipeline 1. Generate title 2. Create brief 3. Generate article 4. Score and optimize using AEO Content Scorecard ### 2. Standalone article creation Provide a title + audience segment + additional instructions for a quick, single-step content generation workflow. ### 3. Automated multi-topic content series [Iterate](/agents/how-tos/add-iterations-to-workflows) over a list of topics, feeding each into this node to produce a series of consistent, high-quality articles. ## Best practices * Always provide a **Content Brief** for the strongest results—this unlocks the research-driven outline. * Use **Audience Segment** to ensure the article resonates with the right people. * Add **Additional Instructions** for custom formatting or editorial rules. * Use **Target Prompt** when optimizing for AI search queries. * Pair with the [AEO Content Scorecard](/agents/workflows/nodes/content-optimization/aeo-content-scorecard) to evaluate and refine output. # AEO Content Scorecard node Source: https://docs.tryprofound.com/agents/workflows/nodes/content-optimization/aeo-content-scorecard Score how well an article performs for Answer Engine Optimization The **AEO Content Scorecard** node evaluates how well a given article performs for Answer Engine Optimization (AEO). It analyzes the URL you provide, retrieves and inspects the content, and produces a structured scorecard with category-level scoring, weighted factors, and specific, actionable recommendations. This node uses the same scoring logic that powers Profound's Content Optimization feature, ensuring consistency between your Workflow outputs and the optimization experience in the Profound platform. Use this node when you want to diagnose how well an article aligns with the way AI systems evaluate relevance, clarity, structure, and answerability—and when you want to programmatically trigger optimization workflows based on these results. ## When to use this node Use the AEO Content Scorecard to: * Audit existing content for AEO readiness * Prioritize content refresh opportunities * Trigger automated improvement workflows * Benchmark your content against top-ranking competitors * Provide structured optimization recommendations to writers or LLMs * Standardize content scoring across your organization This node is highly effective in both human-driven editorial processes and fully automated content optimization pipelines. ## Node configuration Selecting the AEO Content Scorecard node opens its configuration panel on the right side of the Workflow Builder. ### URL (required) Enter the URL of the article you want to evaluate. This can be: * A published content page * A staging URL * A temporary hosting URL * Any accessible webpage containing the article text The node retrieves the content and applies a full analysis across readability, structure, answerability, machine readability, and more. ### Target Prompt (required) Enter the user prompt or question your content should be optimized for. Example: * “How do keyword hierarchies work in AI search?” * “What is predictive maintenance in manufacturing?” This helps evaluate whether the article directly matches user intent as seen in AI-generated answers. ### Output Label Assign a descriptive label to access the scorecard output in downstream steps. Examples: * `aeo_scorecard` * `content_score` * `scorecard_output` ## How the node works behind the scenes AEO Content Scorecard runs a multi-step evaluation pipeline: ### 1. Content retrieval The node fetches the webpage content from the provided URL and prepares it for analysis. ### 2. AEO-focused content parsing The underlying models identify: * Text structure * Header hierarchy * Answerability signals * Entity coverage * URL patterns * Schema presence * Internal linking * Machine readability cues ### 3. Scoring across AEO categories The node produces a weighted score across categories, commonly including: * **Readability** * **Content Freshness** * **Content Structure** * **Answerability Signals** * **Machine Readability** * **Information Density** Each category is scored and flagged (e.g., green, yellow, red). ### 4. Top recommendations The node identifies the highest-impact improvements based on: * AEO principles * Competitor benchmarks * Structural inconsistencies * Opportunities to simplify, clarify, or enhance the content Recommendations include: * Before/after examples * URL improvements * Schema suggestions * Title enhancements * Subheading updates * Opportunities to increase topical relevance ### 5. Final score assembly The node compiles a structured scorecard containing: * Final Score * Target Score Range (based on top competitor performance) * Detailed category breakdown * Actionable recommendations ## Output The resulting output is a structured report similar to the following example: > > [!NOTE] > > ### AEO Content Scorecard > > **URL:**\ > ` https://www.tryprofound.com/blog/introducing-keyword-hierarchies` > > **Final Score:** 72/100\ > **Target Zone (Top Competitors):** 62–72 > > #### Category Breakdown > > | **Category** | **Score** | **Status** | > | - | - | - | > | Readability | 64 | 🟡 | > | Content Freshness | 91 | 🟢 | > | Content Structure | 67 | 🟡 | > | Answerability Signals | 81 | 🟢 | > | Machine Readability | 63 | 🟡 | > | Information Density | 21 | 🔴 | > > #### Top Recommendations > > 1. **Enhance Subheading Relevance**\ > Improve clarity by explicitly mentioning “Keyword Hierarchies in AI Conversations.”\ > *Before:* “The technical innovation”\ > *After:* “How Keyword Hierarchies Enhance AI Conversations” > 2. **Simplify the URL Structure**\ > Shorten the URL to make it more topical and easier for AI systems to parse. > 3. **Implement FAQ Schema Markup**\ > Add FAQ entries such as “What are keyword hierarchies?” to better support answer engines. > 4. **Add Superlatives to the Title**\ > Example improvement:\ > *Before:* “Introducing Keyword Hierarchies”\ > *After:* “Discover the Most Effective Keyword Hierarchies for AI Conversations” ## Example Workflow: AEO Content Refresh Here is how you might use this node inside a real optimization Workflow aimed at automatically improving existing articles and republishing them. **Steps:** 1. **AEO Content Scorecard** * Input the article URL * Retrieve a full AEO scorecard and improvement recommendations 2. **[Prompt LLM](/agents/workflows/nodes/prompt-llm): generate improved article** * Provide the scorecard and instruct the model to apply the recommended improvements * Rewrite the article with updated structure, headings, clarity, and answerability * Maintain original brand voice * Example prompt: ```text wrap theme={null} Here is the AEO Content Scorecard for this article. Apply all recommendations, rewriting the content where necessary. Produce an improved article that would score at least 10 points higher while maintaining factual accuracy and brand voice. {{aeo_scorecard}} ``` 3. **[Prompt LLM](/agents/workflows/nodes/prompt-llm): validate against scorecard criteria** * Ensure the updated article meets or exceeds recommended category scores 4. **Publish or Update Step** * Use [Call API](/agents/workflows/nodes/call-api) or CMS publishing logic to update the article on your site This workflow allows teams to create scalable, repeatable content optimization systems powered by Profound. ## Best Practices * Use the **Target Prompt** field whenever the article exists to answer a specific question. * Pair this workflow with the [Generate Article node](/agents/workflows/nodes/content-creation/generate-article) for iterative optimization loops. * Use clear output labels when chaining scorecards into rewrite steps. * Run this node periodically in recurring Workflow runs to detect content decay. # Query Fanout Estimator node Source: https://docs.tryprofound.com/agents/workflows/nodes/content-optimization/query-fanout-estimator Predict how answer engines expand a single prompt into multiple web search queries The **Query Fanout Estimator** node predicts how answer engines (like ChatGPT, Claude, Gemini, or Perplexity) are likely to expand a single user prompt into multiple **web search queries**. These expanded searches—called [**query fanouts**](https://www.tryprofound.com/blog/introducing-query-fanouts)—are what actually drive retrieval and citations in AI-generated answers. This node helps you understand the search layer behind the answer: which queries an answer engine might run, what facets of intent it will explore, and where your content needs coverage to be cited more often. ## When to use this node Use the Query Fanout Estimator when you want to: * See how a specific **user prompt** is likely to be decomposed into multiple web searches * Identify the **high-intent queries** that matter most for a given prompt * Plan content that covers the full **fanout space** behind important prompts * Feed likely fanout queries into AEO data nodes, content briefs, or keyword clustering workflows * Model how answer engines translate prompts into retrieval behavior for AEO strategy ## Node configuration Selecting the Query Fanout Estimator node opens its configuration panel on the right side of the Workflow Builder. ### Target Prompt (required) The user prompt that your content should optimize for, such as: * “How do keyword hierarchies work in AI search?” * “Best tools for monitoring AI citations for my brand” * “How does query fan-out impact SEO strategy?” The node will estimate which web search queries an answer engine is likely to run when answering this prompt. ### Output Label (required) A descriptive name for the node’s output, for example: * `query_fanout_estimate` * `predicted_fanout_queries` You will use this label to reference the fanout data in downstream steps (e.g., content briefs, research steps, reports). ## How the node works behind the scenes This node runs a two-step pipeline: ### 1. Retrieve real query fanout examples Profound maintains a knowledge base of **historical query fanouts**: real pairs of user prompts and web search queries that answer engines actually ran behind the scenes (the “fanout” set). Given your **Target Prompt**, the node: 1. Performs a semantic search over this fanout dataset 2. Retrieves the most similar prompt–fanout examples 3. Passes those examples forward as in-context demonstrations These examples are not restricted to the same topic; they illustrate how Answer Engines in general expand prompts into multiple searches. ### 2. Estimate fanout for your prompt using an LLM Next, the node uses a model configured specifically to “think like” an Answer Engine’s retrieval layer: * It receives: * Your **Target Prompt** * A set of historical prompt + fanout examples from Profound’s knowledge base * It is instructed to: * Infer how an answer engine would break your prompt into multiple web search queries * Generate **realistic, high-intent, semantically diverse** search queries * Focus on **sub-queries** that would retrieve relevant sources (not just phrasing variants) * Capture different facets of the original intent (definitions, comparisons, how-to steps, evaluation, etc.) ([Profound](https://www.tryprofound.com/blog/expanding-analysis-for-query-fanouts-in-profound?utm_source=chatgpt.com)) The model returns a list of predicted web search queries—your **estimated query fanout**. ## Output The node returns a structured text output containing likely search queries that answer engines would fan out from your prompt. For example: ```text wrap theme={null} what is query fan-out in ai search, how do llms expand user prompts into multiple web searches, impact of query fan-out on brand visibility, examples of query fan-out in google ai overviews,how to optimize content for query fan-out ``` You can parse this text into a list in downstream steps or feed it directly to other nodes. ## Example workflow: Fanout-informed content planning **Goal:** Build a content plan that covers the full set of queries an answer engine might run for a critical prompt. **Steps:** 1. **Query Fanout Estimator** * Input: Target Prompt (e.g., “How do AI-generated answers choose citations?”) * Output: Predicted fanout queries 2. **Research and insights** * For each fanout query: * Use [Perplexity Search](/agents/workflows/nodes/perplexity-search) or [Web Page Scrape](/agents/workflows/nodes/web-page-scrape) to gather citations * Use [Research Snippets Generator](/agents/workflows/nodes/research/research-snippets-generator) to extract facts and quotes 3. **Create content brief** * Feed the fanout queries + research into the [Create Content Brief](/agents/workflows/nodes/content-creation/create-content-brief) node * Ensure the brief mandates coverage for each high-intent sub-query 4. **Generate article** * Use the brief to [Generate Article](/agents/workflows/nodes/content-creation/generate-article) that explicitly addresses the main prompt *and* its fanouts 5. Score the final article * Use [AEO Content Scorecard](/agents/workflows/nodes/content-optimization/aeo-content-scorecard) to checking whether the article covers enough of the fanout space implied by the prompt This workflow ensures your content isn’t just optimized for a single phrasing—but for the **full set of searches** answer engines are likely to run behind that prompt. ## Best practices * Use natural language prompts that mirror real user questions; the fanout will be more realistic. * Store the fanout output in a reusable label (e.g., query\_fanout\_estimate) so it can power multiple downstream steps. * Combine this node with Profound AEO data nodes to see how often your site appears across the predicted fanout queries. * Use fanout results to design FAQs, headings, and section structure that map directly to the likely sub-queries answer engines care about. # Citation Domains node Source: https://docs.tryprofound.com/agents/workflows/nodes/data/citation-domains Retrieve hostname or root domain citation data from Profound The [Citation Domains](/answer-engine-insights/interpret#citations) node retrieves hostname or root domain-level citation data. Use this step when you want to understand which domains are most frequently cited in AI answers referencing your brand. It can be used when: * Identifying top citing domains * Understanding media or partner visibility * Prioritizing digital PR outreach * Analyzing domain-level trends ## Node configuration Selecting the Citation Domains node opens its configuration panel on the right side of the Workflow Builder. ### Metric * Citation Share * Citation Count ### Date Range Select the time window. ### Filters Use filters to narrow the dataset. Fields may include: * Analysis Types * Citation Categories * Hostnames * Regions * Personas * Platforms * Prompts * Tags * Topics You can paste a static value or insert a value dynamically from earlier Workflow steps by typing `/`. When filtering on a field, you must also include that field as a dimension in the field settings. ### Output Format Examples: * JSON * Markdown Table * Domain List ### Output Label (required) Examples: * `citation_pages` * `cited_urls` ## Advanced settings ### Date Interval Group the date interval by day, week, month, or year. ### Limit Set the maximum number of rows returned by the query. This is helpful when using multiple dimensions or sending data into LLM steps. ### Sort Direction Sort the output in ascending (Asc) or descending (Desc) order. ## Output Returns a list of domains with associated citation metrics. # Citation Pages node Source: https://docs.tryprofound.com/agents/workflows/nodes/data/citation-pages Pull cited pages with share of voice and citation counts from Profound The [Citation Pages](/answer-engine-insights/interpret#all-citations) node pulls cited pages from Profound. Retrieve pages with share of voice and citation counts, with optional filters such as personas and domain. Use this step when you want: * Page-level visibility into citations * Identifying which specific URLs are cited * Prioritizing SEO or content updates * Auditing citation coverage * Building outreach workflows ## Node configuration Selecting the Citation Pages node opens its configuration panel on the right side of the Workflow Builder. ### Metric * Citation Share * Citation Count ### Date Range Select the time window. ### Filters (optional) Use filters to narrow the dataset. Fields may include: * Analysis Types * Citation Categories * Hostnames * Regions * Personas * Platforms * Prompts * Tags * Topics You can paste a static value or insert a value dynamically from earlier Workflow steps by typing `/`. When filtering on a field, you must also include that field as a dimension in the field settings. ### Output Format Examples: * JSON * Markdown Table * URL List ### Output Label Examples: * `citation_pages` * `cited_urls` ## Advanced settings ### Date Interval Group the date interval by day, week, month, or year. ### Limit Set the maximum number of rows returned by the query. This is helpful when using multiple dimensions or sending data into LLM steps. ### Sort Direction Sort the output in ascending (Asc) or descending (Desc) order. ## Output Returns a list of URLs with associated citation metrics. # Citation Share node Source: https://docs.tryprofound.com/agents/workflows/nodes/data/citation-share Retrieve share-of-voice citation data from Profound The [Citation Share](/answer-engine-insights/interpret#citation-share-and-citation-coverage) node retrieves share-of-voice citation data from your Profound account. Use this step when you want to understand how often your brand is cited relative to competitors within AI-generated answers. * Measuring competitive share of citations * Tracking citation share trends over time * Comparing citation presence by region or model * Feeding competitive data into LLM analysis ## Node configuration Selecting the Citation Share node opens its configuration panel on the right side of the Workflow Builder. ### Metric * Citation Share * Citation Count ### Date Range Select the reporting window. ### Filters Use filters to narrow the dataset. Fields may include: * Analysis Types * Citation Categories * Hostnames * Regions * Personas * Platforms * Prompts * Tags * Topics You can paste a static value or insert a value dynamically from earlier Workflow steps by typing `/`. When filtering on a field, you must also include that field as a dimension in the field settings. ### Output Label (required) Examples: * `citation_share` * `weekly_citation_share` ## Advanced settings ### Date Interval Group the date interval by day, week, month or year. ### Limit Set the maximum number of rows returned by the query. This is helpful when using multiple dimensions or sending data into LLM steps. ## Output Returns citation share values grouped by selected dimensions. # Citation Watched Pages node Source: https://docs.tryprofound.com/agents/workflows/nodes/data/citation-watched-pages Retrieve citation data for the pages you watch in Profound The **Citation Watched Pages** node retrieves citation data specifically for pages you have designated as watched pages in Profound. Use this step when you want focused monitoring of priority URLs. Use this node when: * Monitoring high-priority product pages * Tracking citations for strategic landing pages * Alerting when watched pages lose citation coverage * Evaluating performance of key content assets ## Node configuration Selecting the Citation Watched Pages node opens its configuration panel on the right side of the Workflow Builder. ### Metric * Citation Share * Citation Count ### Date Range Select the time window. ### Filters Use filters to narrow the dataset. Fields may include: * Analysis Types * Citation Categories * Hostnames * Personas * Platforms * Prompts * Regions * Tags * Topics You can paste a static value or insert a value dynamically from earlier Workflow steps by typing `/`. When filtering on a field, you must also include that field as a dimension in the field settings. ### Output Format Examples: * JSON * Markdown Table * URL List ### Output Label Examples: * `citation_pages` * `cited_urls` ## Advanced settings ### Date Interval Group the date interval by day, week, month or year. ### Limit Set the maximum number of rows returned by the query. This is helpful when using multiple dimensions or sending data into LLM steps. ## Output Returns a list of URLs with associated citation metrics. # Sentiment node Source: https://docs.tryprofound.com/agents/workflows/nodes/data/sentiment Pull positive and negative sentiment scores from Profound into a Workflow > [!TIP] > > To learn more about Sentiment metrics, see the [About Sentiment](/answer-engine-insights/sentiment/about) section. The Sentiment node pulls current Sentiment data from your Profound account into a Workflow. It returns a positive or negative sentiment score for one or more brands or competitors, on a scale from 0 to 1. The score is model-balanced: it is the average across AI platforms, so no single platform controls the score. Use the Sentiment node for tasks such as: * Tracking positive and negative sentiment toward your brand over time * Comparing sentiment between your brand and competitors * Finding sentiment differences across platforms, regions, topics, or themes > [!NOTE] > > The Sentiment node is the newer version of the [Sentiment Score node](/agents/workflows/nodes/data/sentiment-score), which uses an earlier version of Sentiment data. ## Node configuration Selecting the Sentiment node opens its configuration panel on the right side of the Workflow Builder. ### Assets Select one or more brands or competitors to query. The node queries each asset separately and labels each row with the asset name. ### Metric Choose the sentiment metric to return: * **Positive Sentiment** – The share of sentiment toward the asset that is positive. * **Negative Sentiment** – The share of sentiment toward the asset that is negative. The node returns each score as a ratio from 0 to 1. For example, `0.72` means 72%. ### Date range Specify the time window to query. Options include: * Last 2 Days * Last 7 Days * Last 14 Days * Last 4 Weeks * Last 3 Months * Custom date range If you select **Custom date range**, enter a start date and an end date. ### Filters Use filters to narrow the dataset. Fields include: * Tag * Topics * Platforms * Personas * Regions * Theme Select values from the list, or switch the filter to **Variable** to use a value from an earlier Workflow step. The Theme list comes from the first asset you selected. > [!NOTE] > > When a filter value comes from a variable, Tag, Platforms, Personas, and Regions expect IDs. Topics and Theme accept names. To group results by a filter field, open the filter's settings and select **Add \[field] as a dimension**. You can group by up to two dimensions. ### Output label Examples: * `sentiment` * `weekly_positive_sentiment` * `negative_sentiment_by_platform` ## Advanced settings * **Date interval**: Group the results by day, week, or month. * **Limit**: Set the maximum number of rows the node returns. The default is 100 and the maximum is 10,000. The limit applies to the combined results for all selected assets. * **Sort by**: Sort the output by date or by the selected metric. * **Sort direction**: Sort the output in ascending or descending order. ## Output Returns a list of rows. Each row includes: * `asset_name` – The brand or competitor. * `date` – The date interval that the score covers. * `metric_value` – The selected sentiment score, from 0 to 1. * One field for each dimension you group by, such as `platform` or `region`. This output is commonly used in: * LLM narrative summaries * Reputation monitoring Workflows * Competitive sentiment reports > [!TIP] > > Check out [Create a Workflow](/agents/workflows/create-workflow) to learn how to add this node to a Workflow. # Sentiment Score node Source: https://docs.tryprofound.com/agents/workflows/nodes/data/sentiment-score Pull brand sentiment data from Profound into a Workflow > [!WARNING] > > The Sentiment Score node uses an earlier version of Sentiment data and will be deprecated soon. For current Sentiment data, use the [Sentiment node](/agents/workflows/nodes/data/sentiment). The Sentiment Score node pulls brand sentiment data from your Profound account into a Workflow. Use this step when you want to analyze positive, negative, or neutral sentiment toward your brand in AI answers. This node is optimized for understanding perception trends and tone shifts over time. Use Sentiment Score for tasks such as: * Tracking positive vs. negative AI answer sentiment * Identifying sentiment changes after product updates * Comparing sentiment across models or regions ## Node configuration Selecting the Sentiment Score node opens its configuration panel on the right side of the Workflow Builder. ### Metric Choose the sentiment metric to return. Options include: * Positive Count * Negative Count * Total Occurrences * Positive Ratio (%) * Negative Ratio (%) ### Date Range Specify the time window to query (for example, Last 7 Days). The node will return sentiment data only for answers within this range. ### Filters Use filters to narrow the dataset. Fields may include: * Analysis Types * Asset * Citation Categories * Hostnames * Regions * Personas * Platforms * Prompts * Tags * Topics You can paste a static value or insert a value dynamically from earlier Workflow steps by typing `/`. When filtering on a field, you must also include that field as a dimension in the field settings. ### Output Label Examples: * `sentiment_score` * `weekly_sentiment` * `sentiment_by_model` ## Advanced settings ### Date Interval Group the date interval by day, week, month or year. ### Limit Set the maximum number of rows returned by the query. This is helpful when using multiple dimensions or sending data into LLM steps. ### Sort By Sort the output by metric or date. ### Sort Direction Sort the output in ascending (ASC) or descending (Desc) order. ## Output Returns structured sentiment metrics grouped by any selected dimensions. This output is commonly used in: * LLM narrative summaries * Reputation monitoring Workflows * Executive dashboards # Visibility Score node Source: https://docs.tryprofound.com/agents/workflows/nodes/data/visibility-score Pull brand visibility data from Profound into a Workflow The **Visibility Score node** pulls brand visibility data from your Profound account and into a Workflow. Use this node as a step when you want to measure how prominently your brand appears in AI-generated answers. You can then pass the data into downstream steps such as content generation. This node is built for tracking overall brand presence across models, regions, and topics. Use the Visibility Score node for tasks such as: * Monitoring how often your brand appears in AI answers * Measuring share of voice over time * Comparing visibility across regions or topics * Tracking performance before and after campaigns * Triggering alerts when visibility drops below a threshold ## Node configuration Selecting the Visibility Score node opens its configuration panel on the right side of the Workflow Builder. ### Metric Choose the visibility-related metric to return. Options include: * Visibility Score * Share of Voice ### Date Range Specify the time window to query (for example, Last 7 Days). The node will return visibility data only for answers within this range. ### Filters Use filters to narrow the dataset. Options include: * Asset * Personas * Platforms * Prompts * Regions * Topics * Tags You can paste a static value or insert a value dynamically from earlier Workflow steps by typing `/`. When filtering on a field, you must also add that field as a dimension in the field settings. ### Output Label Provide a descriptive label for the node’s result. This becomes the variable name used in downstream steps. Examples: * `visibility_score` * `weekly_visibility` * `regional_share_of_voice` ## Advanced settings ### Date Interval Group the date interval by day, week, month, or year. ### Limit Set the maximum number of rows returned by the query. This is helpful when using multiple dimensions or sending data into LLM steps. ### Sort By Sort the output by metric or date. ### Sort Direction Sort the output in ascending (**Asc**) or descending (**Desc**) order. ## Output The Visibility Score node returns structured data containing: * Selected visibility metric * Any grouping dimensions * Values constrained by filters and date range This output can be consumed by downstream nodes including: * Prompt LLM nodes * Reporting Workflows * Alerting workflows # Research Snippets Generator node Source: https://docs.tryprofound.com/agents/workflows/nodes/research/research-snippets-generator Produce citation-backed research snippets to enrich articles and briefs The **Research Snippets Generator** node produces a curated set of factual, citation-backed research snippets that you can use to enrich articles, briefs, and other content assets. These snippets are extracted directly from high-authority sources using structured research workflows—dramatically reducing hallucinations and ensuring accuracy. Each snippet is short, quotable, and includes its source URL, making it ready for direct insertion into content or for use in downstream analysis or generation steps. Unlike broad summarization nodes, this one focuses on evidence, not narrative: facts, statistics, quotes, and verifiable claims. ## When to use this node Use the Research Snippets Generator when you need: * Accurate facts and citations to support an article * Quickly sourced statistics, definitions, quotes, or authoritative statements * Verifiable evidence for AEO-friendly content * Study materials for briefs, outlines, or LLM-driven content creation * A clean set of structured research snippets for editorial workflows This node is ideal for writers, strategists, and automated content systems that require reliability and transparency. ## Node configuration Selecting the Research Snippets Generator node opens its configuration panel on the right side of the Workflow Builder. ### Article Title (required) The topic or title that the node should research, for example: * “Emerging trends in healthcare technology” * “How generative AI improves supply chain forecasting” * “What is AI visibility and why does it matter?” This title directs the research tools and extraction models. ### Audience Segment Adds context so the node can select sources and snippets that better match the intended reader. For example: * “Enterprise CIOs” * “Healthcare operations managers” * “B2B SaaS marketers” ### Company Name Used for contextual alignment when sourcing or selecting certain snippet styles (e.g., B2B tone vs. consumer tone). ### Content Type Defaults to **General**, but may support variations depending on your workspace configuration. This setting helps the node adjust how granular or technical the snippets may be. ### Target Prompt If you want the research snippets to specifically support a user prompt used in AI search or AEO workflows, enter it here. For example: * “How does AI reduce logistics costs?” ### Output Label (required) Provide a variable name for the resulting JSON structure containing the snippets. Examples: * `research_snippets` * `evidence_blocks` * `snippet_list` ## How the node works behind the scenes The underlying workflow of this node includes: ### 1. Topic-focused research The node queries multiple research tools and models, including systems like Perplexity, to gather: * High-authority webpages * Government or academic reports * Industry data * News articles * Trusted organizational publications This process surfaces a large pool of raw research material. ### 2. Aggregation and de-duplication All retrieved research is consolidated into a structured dataset. The workflow filters: * Low-authority sources * Redundant information * Irrelevant tangents * Non-citable content Only reliable materials move forward. ### 3. Evidence extraction An LLM configured as an AEO Snippet Extractor processes the structured research and identifies extractable facts. Snippets must meet strict criteria: * At least **20 snippets** must be produced (goal: 20–40) * Each snippet must be **factually accurate** * Each snippet must be **directly supported by a cited source** * Snippets must be **under 160 characters** * Avoid hallucinations by extracting text, *not inventing it* * Prefer .gov, .edu, associations, reports, or major media * Verbatim text is allowed when accuracy is critical * Every snippet includes a **URL** This is designed for high trustworthiness, especially in enterprise or regulated contexts. ### 4. JSON formatting The node packages the results into a clean JSON structure, ideal for downstream workflows such as: * Article generation * Snippet clustering * Fact-checking * Scorecards * Human editorial review ## Output You receive a structured JSON object containing **20–40 evidence snippets**, each with a corresponding URL. These snippets can be used to: * Enrich articles * Support claims in content briefs * Provide trustworthy evidence for LLM prompts * Generate research summaries * Accelerate editorial workflows * Power automated article creation pipelines ## Example usage ### 1. Fact-enriched article generation 1. Generate a title with [Article Title Suggestion](/agents/workflows/nodes/content-creation/article-title-suggestion) 2. Run **Research Snippets Generator** 3. Feed snippets + brief into [Generate Article](/agents/workflows/nodes/content-creation/generate-article) 4. Produce a deeply factual article grounded in authoritative sources ### 2. Human editorial workflows Editors can pull snippets directly into outlines, paragraphs, or fact boxes. ### 3. Automated content QA You can use snippets to validate whether article content aligns with cited facts. ## Best practices * Use a **clear and specific Article Title** to ensure relevant research. * Pair with [Create Content Brief](/agents/workflows/nodes/content-creation/create-content-brief) for the strongest content strategy alignment. * Include a **Target Prompt** if writing for AI-answer funnels. * Snippets work extremely well as grounding data in prompt LLM steps. # Workflow runs Source: https://docs.tryprofound.com/agents/workflows/workflow-runs What a Workflow run is, how to start one, and how to review its results A Workflow run is a single execution of a Workflow. It starts when an input is submitted and ends when the final output is generated. While a Workflow provides the reusable structure (its steps, nodes, and logic), each run represents a unique instance of that Workflow in action. Workflow runs let you automate analysis, generate insights, and execute connected tasks consistently and repeatedly, without needing to reconfigure the Workflow each time. ## Test Workflow runs Test runs let you track the inputs, outputs, and variables of each step more closely. From the Workflow Builder, you can view the results of a test run, including: * The steps executed. * The variables produced at each stage. * The final output returned by the Workflow. This makes it easy to troubleshoot, refine prompts, or verify that your Workflow logic behaves as expected. Trigger a test run by clicking **Run Test** in the upper right-hand corner of the Workflow Builder. ![Screen Shot 2025-12-09 at 4.27.56 PM.png](https://mintcdn.com/profound-37face47/LU_swtbqvG5kIsMS/images/agents/agent-runs-1.png?fit=max\&auto=format\&n=LU_swtbqvG5kIsMS\&q=85\&s=27ea6305a2f0ff475e892c0de8f16c84) > [!TIP] > > You can run tests for both published and draft Workflows. To run a test from a published Workflow, go to the Workflow page, select **Edit** on the top right of the page, and test the Workflow in the Workflow Builder. ## Trigger a Workflow run A Workflow run begins when you: * Select **Run** for the desired Workflow * Provide input Each run processes the values you provide, transforms them through each step, and produces a final output. ## How Workflow runs work During a run, the Workflow's steps execute in a linear order: 1. **Inputs are captured**. The Workflow records the values you provide and stores them as variables. 2. **Steps execute sequentially**. Each node performs its action, such as running Answer Engine Insights, prompting a model, or calling an external tool. 3. **Variables pass between steps**. Outputs from each step become new variables that can be reused or combined later in the run. 4. **A final output is generated**. The run ends at the End step, producing a result or simply marking the run’s completion. Because each run is independent, the same Workflow can produce different results based on the inputs you provide or data retrieved during the process. ## View run results Workflow outputs from the latest run appear on the Workflow's page. Select **Past runs** to see the outputs for all runs of the Worklow. # About Profound's AI Marketer (Aim) Source: https://docs.tryprofound.com/aim/about What AI Marketer (Aim) is and how it analyzes your data, suggests work, and gets it done ## What is Profound's AI Marketer AI Marketer, also known as Aim, is your AI marketing teammate in Profound. It works across your AI search data, helps your team analyze it, proactively suggests the work worth doing, and helps you get it done. It also collects and uses the business context you add to Profound. Aim powers [Projects](/projects/about), and every chat surface across the platform, including [Profound Docs](/documents/about), [Sheets](/sheets/getting-started), and Slack. Whenever you chat with Profound, you're talking to Aim. ## What AI Marketer can do Aim handles analysis, execution, and everything in between: it analyzes your data in the background, suggests Projects and tasks, chats with you wherever you work, and can use your Agents to do the work. ### Answer questions about your data Start a conversation wherever you see an Aim icon: inside an Agent, a Project, or a Sheet, in the Answer Engine Insights charts, or in Slack. ![Visibility tab with the AI Marketer button highlighted in the top right corner](https://mintcdn.com/profound-37face47/LU_swtbqvG5kIsMS/images/aim/about-1.png?fit=max\&auto=format\&n=LU_swtbqvG5kIsMS\&q=85\&s=e7d9530d1e91f3d70d5d079eba227e7c) ![Visibility Score chart tooltip with an arrow pointing to the Click to investigate option](https://mintcdn.com/profound-37face47/LU_swtbqvG5kIsMS/images/aim/about-2.png?fit=max\&auto=format\&n=LU_swtbqvG5kIsMS\&q=85\&s=6065c2f9f7cc3a08a93ea4e66851be0f) Ask why a metric moved and what changed, for example: * "Why did our visibility on ChatGPT drop last week?" * "Which competitor is outperforming us on the pricing topic, and why?" * "What's driving negative sentiment for our brand this month?" Then watch Aim scan for peaks and valleys across Visibility, Citation Share, Sentiment, and Prompt Volumes data, and explain the drivers. Beyond questions, ask Aim to build charts, tables, and [dashboards](/custom-dashboards/about), or to edit Agent outputs in Profound Docs without leaving the conversation. ### Work on your goals in Projects A Project gives your Aim chats shared purpose, instructions, and context, such as files and Knowledge Base documents. Create a Project from the **Projects** page, or ask Aim in the home page chat box to start one. Learn more in [About Projects](/projects/about). ### Act on Suggestions Aim analyzes your data and context and suggests new Projects and tasks. Select **Start task** on a Suggestion, and Aim starts working on a plan, such as refreshing a declining page, drafting a head-to-head comparison article, or writing outreach to a top-cited publication. Learn more in [Suggestions from Aim](/projects/suggestions-from-aim). ## AI Marketer's context Aim is grounded in your organization's context. This grounding is what separates its recommendations from generic AI output: the more Profound knows about your business, the more relevant and accurate Aim's suggestions, plans, and content become. > [!TIP] > > Set up and review your brand context in [Context Manager](/context-manager/about). ### The more knowledge, the better the results A well-stocked [Knowledge Base](/context-manager/knowledge-bases-and-brand-kits#how-knowledge-bases-work) lets Aim connect changes in your data to what's true about your business and recommend actions that fit your strategy. Essentials to upload to your Knowledge Base: * **Brand and positioning documents**: messaging guides, tone of voice, style guides, and personas, so content sounds like you. * **Product documentation**: fact sheets, support docs, and help articles. These also serve as the source of truth for FactCheck accuracy analysis. * **Strategy and planning materials**: content calendars, campaign briefs, and target audience research, so Aim prioritizes work that matches your goals. * **Anything you'd hand a new marketing hire**: if a teammate would need it for context, Aim does too. Uploads inform Aim's suggestions and recommendations as soon as they're processed. You can add documents in the platform or push them directly from your LLM tool through the [Profound MCP](/mcp/overview) connector. ## Tips for working with AI Marketer ### Keep your Knowledge Base current Outdated documents produce outdated recommendations. Set up auto-sync for your Knowledge Base documents so that changes to your positioning, pricing, or product facts flow in automatically. ### Start with a conversation The fastest way to see Aim at work is to chat with it. If you're not sure what to build or what it can do, go into the platform and ask it. ### Bring AI Marketer into Slack Once you connect your Slack workspace to Profound, you can ask Aim questions and follow its work in real time without leaving the thread. > [!TIP] > > To learn how to set up a Slack connector, see [Connect Slack to Profound](/integrations/slack/connect-slack-to-profound). # Writing prompts for AI Marketer (Aim): best practices and examples Source: https://docs.tryprofound.com/aim/writing-prompts How to tell AI Marketer (Aim) what to look at, what to measure, and how to structure the answer ## Building blocks of a good prompt Tell [AI Marketer (Aim)](/aim/about) what to look at, what to measure, how deep to go, and how to structure the answer. A good prompt covers: 1. **Input** — The thing to act on: a brand, a URL, a competitor, a list of topics. Use `[brand]`, `[competitor]`, and `[topic]` as placeholders so a prompt works for any team. 2. **Data source** — Where to look and how deep: "top 20 cited pages from the last 30 days", "owned URLs cited on ChatGPT this month". 3. **Task** — The specific analysis or decision you want made, not just a summary: "classify each source as press, affiliate, or UGC". 4. **Purpose** — The business goal behind the task. It helps Aim prioritize useful findings over noise: "to find partnership opportunities we're missing". 5. **Output format** — The deliverable structure: a table with named columns, a ranked list, flagged items. This helps make answers readable and useful. For example: > **(Input)** Create an exec-ready gap analysis for `[brand]` vs `[competitor]` **(Source)** across all tracked topics from the past 30 days. **(Task)** Compare visibility share and citation share by topic, then inspect the top citation pages behind the biggest gaps to identify why `[competitor]` is winning, **(Purpose)** so we know where to focus content efforts. **(Output)** Output a table with: topic, owned and competitor visibility share, owned and competitor citation share. Add a second table with: top citation page, likely driver, confidence, recommended action. Under the tables, add concise bullets on the biggest gaps and priority next steps. ## Prompt best practices 1. **One prompt = one job.** Keep the prompt focused to a single task. Prompts with multiple tasks like "Review the top 20 cited pages, and then also check whether any affiliate pages have outdated pricing claims" won't return a good result for either. 2. **Give detailed instructions**. Explain a task to Aim the way you'd explain it to a less experienced colleague. Vague instructions like "Analyze my data" gives Aim nothing to work with. 3. **Start with a verb**: go through, scan, review, identify, compare, flag, output. 4. **Be specific about scope**: top 20 pages, last 30 days, top three competitors. 5. **Define the output format**: a table, a ranked list, flagged items with columns. Otherwise results become unreadable and inconsistent from run to run. 6. **Include a confidence or rationale column**. It makes the output actionable. 7. **Chain the logic**: first do X, then for each result do Y, then output Z. ### Scale a prompt with Sheets When you want the same analysis across many topics, URLs, or competitors, run it in a [Sheet](/sheets/getting-started). Put one input value per row in column A, point the prompt at that column, and Aim runs the prompt for each row in parallel. This works well for topic reports (a gap analysis across 80 topics), content audits (an accuracy check across 200 URLs), and user-generated content sweeps (a Reddit scan across 100 topics). > [!TIP] > > Learn more in [Get started with Sheets](/sheets/getting-started)​.​ ## Example prompts Below is the catalog of reusable prompt examples. Copy the prompt text, fill in the placeholders and adjust the scope to your needs. > **See where competitors are beating you in AI answers.** > > ```txt wrap theme={null} > Compare [brand] and [competitor] across all tracked topics from the past 30 days on visibility share and citation share. For the topics with the biggest gaps, inspect the top citation pages and explain why [competitor] is winning, so we can prioritize content work. Output a table with: topic, owned visibility share, competitor visibility share, owned citation share, competitor citation share, likely driver, confidence, recommended action. Finish with bullets on the biggest gaps and priority next steps. > ``` > **Discover which content types earn your citations.** > > ```txt wrap theme={null} > Review the top cited owned pages for [brand] from the past 30 days. Classify each page as blog, product page, FAQ, landing page, comparison, docs, guide, case study, glossary, or other, so we can see which content formats are working. Output an exec summary, key findings, and a table with: URL, content type, citation count, evidence, confidence, recommended action. > ``` > **Find pages where AI cites you but doesn't name you.** > > ```txt wrap theme={null} > Go through the owned URLs for [brand] that appeared in AI answers this month. Check whether [brand] appears prominently in the title, H1, intro, first paragraph, or key summary sections, so we can fix pages that get cited without clearly saying our name. Output an exec summary, key findings, and a table with: URL, prominence status, evidence, confidence, recommended fix. > ``` > **Diagnose which owned pages are losing citation share, and to whom.** > > ```txt wrap theme={null} > Scan the top 20 owned cited pages for [brand] from the past 60 days across ChatGPT, Google AI Overviews, Gemini, and Google AI Mode. Identify pages with a month-over-month drop in citation share. For each drop, check which engines and prompts are affected and which replacement sources gained visibility, so we can diagnose lost AI visibility. Output an exec summary, key findings, and a table with: URL, citation share, MoM delta, replacement source, likely cause, confidence, recommended action. > ``` > **Catch AI misrepresentations of your owned pages.** > > ```txt wrap theme={null} > Take the top 20 cited unique owned pages for [brand] from the past 30 days and scrape each page. Compare the AI responses that cite them against the page content and flag meaningful omissions or contradictions, so we catch brand accuracy issues before they spread. Output an exec summary, key findings, and a table (max 20 priority items) with: URL, engine, prompt, AI claim, page claim, mismatch type, severity, recommended action. > ``` > **Classify every earned source driving your AI visibility.** > > ```txt wrap theme={null} > Review the top 20 cited pages for [brand] from the past 30 days. Classify each source as press, analyst, review site, affiliate, social/UGC, owned, or other, so we understand which earned channels drive visibility. Output an exec summary, key findings, and a table with: URL, source category, brand sentiment, evidence, confidence, recommended action. > ``` > **Catch outdated affiliate content that can misrepresent your brand.** > > ```txt wrap theme={null} > Using the [brand] Knowledge Base as the source of truth, go through affiliate and partner pages cited in the past 60 days. Flag outdated or inaccurate claims about positioning, features, pricing, audience, screenshots, or competitors, so partner content doesn't misrepresent the brand in AI answers. Output an exec summary, key findings, and a table with: URL, partner, issue, evidence, severity, confidence, recommended fix. > ``` > **Monitor reputational risk in AI-cited community content.** > > ```txt wrap theme={null} > Scan social-origin citations for [brand] from the past 30 days and scrape the body text of each page. Flag UGC that mentions [brand] negatively, inaccurately, incompletely, or with reputational risk, so we can monitor brand risk in AI-cited community content. Output an exec summary, key findings, and a table with: URL, UGC type, mention type, risk, evidence, severity, confidence, recommended action. > ``` > **Find Reddit threads worth engaging.** > > ```txt wrap theme={null} > Review the top cited Reddit threads for [brand] on [topic] from the past 60 days. For each thread, check recency, [brand] mentions, competitor mentions, sentiment, and whether [brand] has a credible opportunity to enter the conversation, so we know which threads to monitor, engage, or support with owned content. Output an exec summary, key findings, and a table with: prompt, subreddit, URL, brand mentioned, competitors mentioned, sentiment, user need, opportunity level, evidence, recommended action. > ``` # About Answer Engine Insights (AEI) Source: https://docs.tryprofound.com/answer-engine-insights/about How Answer Engine Insights (AEI) shows your brand's performance across AI answer engines > [!NOTE] > > **Available on:** all plans > > **Find it in:** Analytics > Answer Engine Insights Answer Engine Insights is a collection of analytical tools that show how your brand performs across AI answer engines, such as ChatGPT, Perplexity, or Gemini. Profound queries these answer engines and builds a dataset from the responses that shows how your brand is represented. Below are the core concepts that Answer Engine Insights is built on. ## Prompt-driven analysis Prompts are the queries Profound sends to answer engines daily. Profound aggregates the responses into a dataset you can filter to measure your brand's performance in answer engine results. For example, Profound sends a prompt such as "What is the best tool for answer engine analysis" to each answer engine, then captures every response as a data point. Together, these data points show how your brand is represented across all responses. ### Topics A topic is a group of related prompts organized around a common theme, product, or business objective. Topics structure your full collection of prompts. ### Tags Tags add another layer of classification to prompts. Use them to group or filter prompts in Answer Engine Insights. > [!TIP] > > Learn more in [Create, manage and tag prompts](/answer-engine-insights/prompt-designer). ## Visibility score Profound tracks whether your brand appears in an answer engine response. If your brand is present, your Visibility score increases for that response; if it's not, the score decreases. The Visibility score is a percentage: the number of responses that include your brand divided by the total number of responses that include at least one brand. For example, if your brand appears in 5 out of 10 responses, your Visibility score is 50% (5/10). ## Citations A citation is a reference or link to a specific webpage, article, or resource within an answer engine response. Profound tracks how often answer engines cite your brand, which shows how they use your site's content. ## Sentiment [Sentiment](/answer-engine-insights/sentiment/about#extracting-themes-from-ai-responses) is Profound's evaluation of how your brand is portrayed in AI-generated responses. For example, a response mentioning "high cost" lowers the Sentiment score because it reflects a negative association with your brand. A response stating "proven results" raises the score because it indicates a positive association. ## FactCheck FactCheck is Profound's accuracy layer. It measures how AI engines describe your brand and pinpoints which sources are responsible when they get it wrong. FactCheck extracts the specific claims AI models make about your brand, checks each one against your own source of truth, and shows which citation URLs fuel any inaccurate information. FactCheck has its own set of metrics and concepts, such as Accuracy, Claims, and Themes. Learn more in [About FactCheck](/answer-engine-insights/factcheck/about). ## Share of Voice Share of Voice measures how often answer engines mention your brand relative to competitors, showing how prominent your brand is against other brands. Share of Voice is a percentage: the number of responses that mention your brand divided by the total number of brand mentions across all responses. For example, if your brand is mentioned 20 times out of 100 total brand mentions, your Share of Voice is 20% (20/100). ## Average Position Average Position ranks where your brand is mentioned in the AI answers against competitors in your market. It aggregates performance indicators, such as Share of Voice, into a ranked score. A score of 1 means that your brand is typically the first one to be mentioned in an AI response. ## Charts Charts are the graphs, tables, and visualizations that help you interpret how your brand performs in answer engine results. Each chart has its own configuration options depending on what it displays. To learn how each chart works, see [Interpret Answer Engine Insights](/answer-engine-insights/interpret).​ # Chart annotations in AEI Source: https://docs.tryprofound.com/answer-engine-insights/chart-annotations Mark events on Answer Engine Insights and Shopping charts to explain changes in your metrics over time > [!NOTE] > > **Available on:** the Enterprise plan > > **Find it in:** Analytics > Answer Engine Insights, Analytics > Shopping > > **Required role:** all roles can view, Admin and Editor can create and manage. Seeing who made a prompt update requires the View Activity Logs permission. Chart Annotations are notes pinned to a date on a chart. Use them to record events, such as a product launch, a content refresh, or a change to your prompts, so anyone looking at a trend can see the context behind it. ## View annotations Annotations appear on all time-series line charts in [Answer Engine Insights](/answer-engine-insights/about) and on the line charts in [Shopping](/shopping/about). AI Marketer (Aim) can also show annotations on the line charts it generates. 1. Find the annotation markers along the bottom of a line chart. 2. Select a marker to see every annotation for that date, newest first. When dates are close together, their markers merge into one. To hide annotations, open the chart’s settings (the sliders icon) and turn off **Annotations**. ![Line chart with annotation markers along the bottom.](https://mintcdn.com/profound-37face47/LU_swtbqvG5kIsMS/images/answer-engine-insights/chart-annotations-1.png?fit=max\&auto=format\&n=LU_swtbqvG5kIsMS\&q=85\&s=e31d9ae4da273d25be9f857d1621ddba) ## Types of annotations ### User annotations Created by people in your organization. Shows anything your team wants to record. ![User annotation details shown in an annotation panel.](https://mintcdn.com/profound-37face47/LU_swtbqvG5kIsMS/images/answer-engine-insights/chart-annotations-2.png?fit=max\&auto=format\&n=LU_swtbqvG5kIsMS\&q=85\&s=eca27e4e7b867786ddb32f534d4e23a5) ### Platform updates Created automatically by Profound for a model change on an AI platform that it tracks, such as a new ChatGPT model. Platform updates are hidden when that platform isn’t selected in your model filter. ![Platform update annotation details shown in an annotation panel.](https://mintcdn.com/profound-37face47/LU_swtbqvG5kIsMS/images/answer-engine-insights/chart-annotations-3.png?fit=max\&auto=format\&n=LU_swtbqvG5kIsMS\&q=85\&s=95570e8d767b1cd1559aac27fd021f0a) ### Prompt updates Created automatically by Profound for a daily summary of prompt changes in a category, for example “12 prompts added, 3 disabled.” If you have the View Activity Logs permission, prompt updates also list the people who made the changes, and you can select **View activity logs** to see each change in Activity Logs. ![Prompt update annotation details with a View activity logs option.](https://mintcdn.com/profound-37face47/LU_swtbqvG5kIsMS/images/answer-engine-insights/chart-annotations-4.png?fit=max\&auto=format\&n=LU_swtbqvG5kIsMS\&q=85\&s=2cdd67e16b98dd531a13c5206225bc4e) ## Add an annotation Add an annotation in any of the following ways: * Select **Add annotation** at the top right of a chart. The date defaults to the end of your selected date range. ![Add annotation button at the top right of a chart.](https://mintcdn.com/profound-37face47/LU_swtbqvG5kIsMS/images/answer-engine-insights/chart-annotations-5.png?fit=max\&auto=format\&n=LU_swtbqvG5kIsMS\&q=85\&s=6bd8de2c0ce7f1aebc0748809389ef15) * Select a single date on a chart to pin it, then select **Annotate** in the tooltip. ![Annotate option shown after selecting a date on a chart.](https://mintcdn.com/profound-37face47/LU_swtbqvG5kIsMS/images/answer-engine-insights/chart-annotations-6.png?fit=max\&auto=format\&n=LU_swtbqvG5kIsMS\&q=85\&s=c59f6916996a8bec3cb5dbf5989dc542) * In an open annotation list, select **Add annotation** next to a date. ![Add annotation option shown next to a date in an annotation list,](https://mintcdn.com/profound-37face47/LU_swtbqvG5kIsMS/images/answer-engine-insights/chart-annotations-7.png?fit=max\&auto=format\&n=LU_swtbqvG5kIsMS\&q=85\&s=351ea08437fbb2d2ae544eb6704ff81e) Fill in the **Add chart annotation** form: ![Add chart annotation form with date, description, and category fields.](https://mintcdn.com/profound-37face47/LU_swtbqvG5kIsMS/images/answer-engine-insights/chart-annotations-8.png?fit=max\&auto=format\&n=LU_swtbqvG5kIsMS\&q=85\&s=b42d5eebf310f052a01129a8c1e33eaf) * **Date**: any date within the chart’s selected date range. To annotate a date outside the range, widen the date range first with the top-level filters. * **Description**: what happened. * **Categories**: where the annotation shows. By default it’s **All categories**, which applies to your whole organization, including categories you add later. To narrow it, select specific categories. The category you’re viewing is always included. Select **Save**. Everyone in your organization who can view annotations sees it. ## Edit or delete an annotation You can edit or delete only the annotations you added. 1. Open the annotation list and select **…** next to your annotation. 2. Select **Edit** to change the annotation, or select **Delete**. Deleting an annotation is permanent. Platform updates and prompt updates can’t be edited or deleted. ![Menu for editing or deleting a user-created annotation.](https://mintcdn.com/profound-37face47/LU_swtbqvG5kIsMS/images/answer-engine-insights/chart-annotations-9.png?fit=max\&auto=format\&n=LU_swtbqvG5kIsMS\&q=85\&s=96f3d121ad8d9ca37f46713581618b21) ## Investigate an annotation with Aim If you have access to Aim, select **Investigate with Aim** next to any annotation. Aim opens with the annotation and the chart you were viewing, and starts looking into how the event relates to that metric. ![Investigate with Aim option shown next to an annotation.](https://mintcdn.com/profound-37face47/LU_swtbqvG5kIsMS/images/answer-engine-insights/chart-annotations-10.png?fit=max\&auto=format\&n=LU_swtbqvG5kIsMS\&q=85\&s=fb0aca6701a25806a353b38b1c1190ca) Aim can also read your annotations when you ask about your Answer Engine Insights data. In Shopping, you can also ask Aim to explain a rise or drop in a metric, such as the Shopping Visibility Score, merchant score, or product visibility score. Select **Investigate** at the top right of a chart, or select a date range on the chart and then select **Investigate with Aim** in the tooltip. ## Permissions > [!TIP] > > Learn more in the [Roles and permissions](/platform-config/people/roles-and-permissions) documentation. | Role | View annotations and prompt updates | Add, edit, and delete their own annotations | See who made prompt updates | | - | - | - | - | | Admin | ✅ | ✅ | ✅ | | Editor | ✅ | ✅ | ❌ | | Member | ✅ | ❌ | ❌ | | Viewer - AEI Only | ✅ | ❌ | ❌ | | Viewer - AEI + AI Marketer | ✅ | ❌ | ❌ | | Agent Operator | ✅ | ❌ | ❌ | Prompt updates come from [Activity Logs](/platform-config/activity-logs/about), which are available on the Enterprise plan. Everyone who can view annotations sees them; seeing who made the changes and opening Activity Logs needs the **View Activity Logs** permission. Admins on the Enterprise plan can change these defaults with a custom role using the **View chart annotations** and **Create, edit, and delete custom chart annotations** permissions. Annotations belong to your organization, and category-scoped annotations only show when viewing that category. # Export prompts and topics Source: https://docs.tryprofound.com/answer-engine-insights/export-prompts-and-topics Download or copy prompts and topics from Answer Engine Insights You can export prompts and topics in two places: [**Answer Engine Insights > Prompts**](/answer-engine-insights/interpret#prompts) tab, and in [Prompt Designer](/answer-engine-insights/prompt-designer). Exports support downloading files or copying data in JSON and CSV formats. ## Export in Prompt Designer ### Export prompts In Prompt Designer table, select the prompts you want to export. Then select **Export prompts** at the top of the table. ![Prompt Designer Export prompts button highlighted with CSV and JSON export options](https://mintcdn.com/profound-37face47/LU_swtbqvG5kIsMS/images/answer-engine-insights/export-prompts-and-topics-1.png?fit=max\&auto=format\&n=LU_swtbqvG5kIsMS\&q=85\&s=8474cf985430043610b4d6d384bd7075) ### Export topics Prompt Designer doesn’t support topic exports, but it does support exporting all prompts from a topic: * Select a topic in the topics panel, this selects all prompts in that topic. * Select **Export prompts** at the top-right of the table. ![Prompt Designer with a topic selected and Export 92 prompts button highlighted](https://mintcdn.com/profound-37face47/LU_swtbqvG5kIsMS/images/answer-engine-insights/export-prompts-and-topics-2.png?fit=max\&auto=format\&n=LU_swtbqvG5kIsMS\&q=85\&s=e04f3526c036e7603e2c776c4550a9cd) ## Export in Answer Engine Insights ### Export prompts In **Answer Engine Insights > Prompts**, select the download icon next to the search field. To export the full prompt list, select a time period and make sure that no **Group By** filter is applied. ![Prompts tab with date range, Group by menu, and download icon highlighted](https://mintcdn.com/profound-37face47/LU_swtbqvG5kIsMS/images/answer-engine-insights/export-prompts-and-topics-3.png?fit=max\&auto=format\&n=LU_swtbqvG5kIsMS\&q=85\&s=72f8a2ef17384d2043e006c558119847) Prompt exports include tracked prompts and their key performance indicators. Prompt export fields include: * Prompt * Topic * Tags * Visibility * Average Position * Citation Share * Citation Ranks * Executions ### Export topics In **Answer Engine Insights > Prompts**, apply the **Group by: Topic** filter to the prompts table. Then, copy or download the CSV or JSON the same way. ![Prompts tab with settings icon and Group by Topic option highlighted](https://mintcdn.com/profound-37face47/LU_swtbqvG5kIsMS/images/answer-engine-insights/export-prompts-and-topics-4.png?fit=max\&auto=format\&n=LU_swtbqvG5kIsMS\&q=85\&s=55eee746c9c6cca5ccd198ff1af678d5) > [!TIP] > > Select **Open in Sheets** to feed your exported prompts directly to your [Workflows](/agents/workflows/about-workflows). Learn more in [Get started with Sheets](/sheets/getting-started). # About FactCheck Source: https://docs.tryprofound.com/answer-engine-insights/factcheck/about How FactCheck catches what AI engines get wrong about your brand > [!NOTE] > > **Available on:** all plans > > **Find it in:** Analytics > Answer Engine Insights > FactCheck tab FactCheck is Profound's accuracy layer. It measures how AI engines describe your brand and pinpoints which sources are responsible when they get it wrong. It extracts the specific claims AI models make about your brand, checks each one against your own source of truth, and shows you which citation URLs fuel any inaccurate information. The result is a clear, actionable picture of where AI-generated misinformation comes from, so your content team knows exactly what to fix. [Profound Factcheck walkthrough](https://player.mux.com/x34671MQlYaTJ02yS5MYjTI2N7H1hi86EvfbSqBLaL7U?metadata-video-title=Profound+Factcheck+walkthrough\&video-title=Profound+Factcheck+walkthrough) ## When AI gets your brand wrong AI search engines like ChatGPT, Perplexity, and Gemini don't just surface links, they make direct claims about your brand. They describe your product features, pricing, policies, and service terms as facts. When those claims are wrong, your customers are misled before they ever reach your website. And in many cases, inaccuracies don't come from AI fabricating information. They come from a brand's own published content being out of date. The problem is that monitoring this at scale is nearly impossible without specialized tooling. Brands may know anecdotally that AI sometimes gets things wrong, but they have no systematic way to measure how often it happens, which prompts are affected, or which sources are responsible. Without that information, there's no clear path to fixing it. Content teams can't update a page they don't know is the problem, and brand teams can't report on accuracy without data to back it up. For brands where facts matter most, such as those with regulated products, complex pricing, or frequently updated policies, this gap is especially costly. ## How FactCheck works > [!TIP] > > FactCheck requires a Knowledge Base to verify claims. Learn more in [Knowledge Bases and Brand Kits](/context-manager/knowledge-bases-and-brand-kits). FactCheck brings together three things that were previously separate: claim extraction, source-of-truth verification, and citation attribution. Profound pulls the claims AI engines make about your brand across all your FactCheck-tagged prompts, compares each claim against your [Knowledge Base](/context-manager/knowledge-bases-and-brand-kits), and classifies it as accurate, inaccurate, or not relevant. Only factual, actionable, and atomic claims are verified: each claim must assert a single thing that your source of truth can confirm or contradict. Subjective statements are routed to [Sentiment](/answer-engine-insights/sentiment/about) instead. For every inaccurate claim, FactCheck traces the finding back to the specific citation URLs in the AI response that appear to drive it. The citation URL is what makes the data actionable: instead of knowing only that AI is saying something wrong, you know which page or document in your Knowledge Base is the likely source of the problem. Once you've identified the inaccuracies, run a [Profound Agent](/agents/about) directly from the FactCheck view to draft the outreach, update your Knowledge Base, create content, or otherwise help answer engines discover the correct information about your brand. ## Key features ### Claim extraction and verification FactCheck automatically extracts the specific claims AI engines make about your brand in response to your FactCheck-tagged prompts. Claims are filtered to those that are factual, actionable, and atomic, each asserting one verifiable thing. Subjective claims are routed to Sentiment instead. Each claim is then checked against your [Knowledge Base](/context-manager/knowledge-bases-and-brand-kits) and classified as accurate, inaccurate, or not relevant. This gives you a structured, consistent view of where AI gets things right and where it doesn't, with no manual review of individual responses. ### Claim clustering by theme Rather than presenting thousands of individual claims, FactCheck groups similar claims into themes. This makes the data much more digestible and helps you understand which topic areas have the most accuracy problems. Instead of sifting through raw claim lists, you see at a glance that, for example, claims about your cancellation policy are a bigger problem than claims about your pricing. ### Citation-level accuracy breakdown For every inaccurate claim, FactCheck shows you which citation URLs in the AI response are associated with that inaccuracy. This is the feature that turns FactCheck data into a direct action item for content teams. You know which page to update, not just that something is wrong. ### Accuracy overview and metrics The **Accuracy Overview** section shows what changed from last week to the current week (the time period is customizable): Accuracy Score and Share, top inaccurate claims, movement across themes, and a comparison across reporting periods. Click into any inaccurate claim to see why it's wrong, the ground truth from your Knowledge Base, and every location in the [Knowledge Base](/context-manager/knowledge-bases-and-brand-kits) where the correct information is defined. ### User feedback mechanism If a claim is marked inaccurate but is actually correct, report it directly in the FactCheck UI, and the claim is removed from your view. If a claim isn't something you want to track, mark it as not relevant. Profound uses this feedback to keep improving claim verification. ### Run Agents directly from claim views Take action directly from any inaccurate claim view: run an [Agent](/agents/about) to draft outreach to the citation source, update your own content, or create new content to address the inaccuracy. # FactCheck FAQ Source: https://docs.tryprofound.com/answer-engine-insights/factcheck/faq Frequently asked questions about FactCheck in Answer Engine Insights > **What’s the difference between FactCheck and Sentiment?** > > FactCheck evaluates the factual accuracy of what's said about your brand, while [Sentiment](/answer-engine-insights/sentiment/about) measures the tone and perception of how your brand is described. The two features are complementary. Use them together for the best results. > **How often does the FactCheck run?** > > FactCheck runs daily across all your FactCheck prompts. When set up for the first time, it takes 7 days for FactCheck results to appear in Profound. > **Is FactCheck automatically enabled for every new workspace?** > > No. FactCheck is set up separately in each workspace. Learn more about how to set it up in [Get started with FactCheck](/answer-engine-insights/factcheck/getting-started). > **Will FactCheck automatically show older historical data if I set it up later?** > > No. FactCheck starts producing results after setup is complete, and first-time results typically take 7 days to appear. > **What is the maximum number of FactCheck prompts I can configure?** > > The limit is 200 prompts. If you need more, reach out to your Profound team. > **What types of content can I use as a source of truth?** > > Support documentation and help center pages work well because they're factual, structured, and ideally regularly maintained. Internal product specs, policy documents, and Q\&A documents also work well. Learn more in [How to get the best results working with FactCheck](/answer-engine-insights/how-tos/factcheck-best-results). > **What happens if there is nothing in the Knowledge Base?** > > FactCheck requires a [Knowledge Base](/context-manager/knowledge-bases-and-brand-kits) to function. Without one, there's no source of truth to verify claims against, and the feature won't produce results. Even a simple Q\&A document covering your brand's most important facts is enough to get started. > **Can I track how often AI responses align with our official brand facts?** > > Yes. FactCheck surfaces a representation accuracy metric: the percentage of times AI engines state correct information about your brand across your FactCheck prompts. Track this over time to measure progress as you update citation sources, expand your [Knowledge Base](/context-manager/knowledge-bases-and-brand-kits), or add new prompts. > **Does FactCheck work only for brand-specific facts, or can it verify other types of claims?** > > FactCheck is designed for brand-specific, fact-based claims: product specifications, pricing, policies, safety information, features, and service terms. It isn't designed to verify general legal or medical information that isn't specific to your brand, and it doesn't verify visual content such as logos or images in AI-generated media. > **Why can some claims not be verified?** > > FactCheck verifies only claims it can confidently check against your [Knowledge Base](/context-manager/knowledge-bases-and-brand-kits). If the relevant information isn't in the Knowledge Base, the claim is left unverified. Expanding and updating your Knowledge Base directly increases verification coverage. Learn more in [How to get the best results working with FactCheck](/answer-engine-insights/how-tos/factcheck-best-results). > **Can FactCheck help us get ahead of misinformation before a product launch?** > > Yes. FactCheck works best when used proactively. Before a launch, upload updated product documentation to your [Knowledge Base](/context-manager/knowledge-bases-and-brand-kits) and tag prompts that cover the facts most likely to be misrepresented. Once FactCheck identifies inaccurate citations, your content team can contact those sources or submit corrections before the misinformation spreads. The citation-level breakdown shows which third-party pages to prioritize. > **Can FactCheck help recover brand reputation after a negative event?** > > FactCheck gives you visibility into which AI responses state incorrect or outdated information about your brand and which sources are responsible. After a negative event, use this data to identify the specific pages driving harmful claims, take action to update or correct those sources, and track whether representation accuracy improves over time. Used alongside [Sentiment](/answer-engine-insights/sentiment/about), it gives you a complete picture of both what AI says and whether it's factually correct. # Get started with FactCheck Source: https://docs.tryprofound.com/answer-engine-insights/factcheck/getting-started Set up FactCheck by assigning prompts and connecting a Knowledge Base ## Step 1: Open the FactCheck tab Go to [**Answer Engine Insights**](/answer-engine-insights/about) **> FactCheck**. The first time you open the tab, an onboarding screen guides you through setup: assigning the FactCheck analysis type to your prompts and connecting a [Knowledge Base](/context-manager/knowledge-bases-and-brand-kits). ## Step 2: Choose your prompts 1. From the onboarding screen, open the [Prompt Designer.](/answer-engine-insights/prompt-designer) ![Set up FactCheck screen with the Open Prompt Designer button highlighted](https://mintcdn.com/profound-37face47/LU_swtbqvG5kIsMS/images/answer-engine-insights/factcheck/getting-started-1.png?fit=max\&auto=format\&n=LU_swtbqvG5kIsMS\&q=85\&s=affdd859cf37d906bed4b88ef3f6bd86) 2. Select 100 to 200 fact-based prompts that are likely to surface verifiable claims about your brand. Good candidates include prompts about product specifications, pricing, policies, safety claims, features, and service terms. Avoid opinion-based or subjective prompts. > [!TIP] > > To learn more about FactCheck prompt best practices, see [How to get the best results working with FactCheck](/answer-engine-insights/how-tos/factcheck-best-results). 3. After you select the prompts, go to **Edit > Analysis Types** and set their analysis type to **FactCheck**. 4. If you're already tracking prompts for Visibility or Sentiment, you can add FactCheck to those or create new prompts specifically for FactCheck. ## Step 3: Connect a Knowledge Base On the onboarding screen, select the **+ Connect Knowledge Base** and select the Knowledge Base you want FactCheck to use as its source of truth. ![Set up FactCheck screen with the Connect Knowledge Base button highlighted](https://mintcdn.com/profound-37face47/LU_swtbqvG5kIsMS/images/answer-engine-insights/factcheck/getting-started-2.png?fit=max\&auto=format\&n=LU_swtbqvG5kIsMS\&q=85\&s=d821988b66e9706cd9236c6e46c8361c) FactCheck uses the entire Knowledge Base, so there's no need for a special file structure. Organize your documents however works best. If you don't yet have a Knowledge Base you want to set up with FactCheck, go to **Knowledge Bases** in the left navigation menu, create a Knowledge Base, and upload your documentation as described in [Create and manage Knowledge Bases](/context-manager/manage-knowledge-bases). > [!NOTE] > > You can connect only one Knowledge Base to FactCheck. Learn more about Knowledge Base best practices and setup limitations in [How to get the best results working with FactCheck](/answer-engine-insights/how-tos/factcheck-best-results). ## Step 4: Complete setup Once your prompts carry the FactCheck analysis type and a Knowledge Base is connected, select **Complete setup**. ## Step 5: Explore the results FactCheck results typically take 7 days to appear. Once available, go to **Answer Engine Insights** > **FactCheck** to review them: * Browse **Inaccurate Claims** by theme and expand themes to view the claims and the ground truths they were evaluated against. * Review the **Accuracy Breakdown** per citation, platform or prompt. Select citations or prompts to open a detailed analysis view. ## Step 6: Take action Review the **Inaccuracy Drivers** table. It lists the pages that drive the most inaccurate claims about your brand. Take action directly from the table: select **Draft Outreach** in the **Suggested Action** column and have [AI Marketer](/aim/about) build an [Agent](/agents/about) to draft outreach for that source. # How to create effective prompts Source: https://docs.tryprofound.com/answer-engine-insights/how-tos/create-effective-prompts Use Prompt Volumes and Intent data to write prompts that match how real users talk to AI tools Creating effective prompts ensures your brand aligns with how real users engage with AI tools. Profound’s Prompt Volumes and Intent data help confirm that your topics and phrasing match the language people use when talking to LLMs. > [!TIP] > > Learn more about creating and validating prompts with Prompt Volumes data in the [Validating Your Tracking with Volume Data](https://university.tryprofound.com/courses/profound-101/modules/setup/lessons/validating-your-tracking-with-volume-data) lesson, part of Profound University's [Profound 101](https://university.tryprofound.com/courses/profound-101) course. ## Map Prompt Volumes (demand signal) [Prompt Volumes](/prompt-volumes/about) reveals what people are already asking AI about your product or category. Use these volumes to validate that your topics and phrasing align with real audience demand. To map Prompt Volumes: 1. Open **Prompt Volumes** in Profound. 2. Enter a seed term (for example, "corporate card rewards"). 3. Review related prompts: check volume, region, and LLM breakdown. 4. Identify variations that map best to your audience's natural phrasing. > [!TIP] > > Start with your existing SEO key phrases, then rephrase them into natural, question-style prompts that reflect how people actually ask in ChatGPT, Claude, or Perplexity. For example, turn “best corporate card small business” into **“What’s the best corporate credit card for small teams?”** ## Balance by intent (purpose of query) Every prompt has an underlying intent, whether users are learning, comparing, or acting. Use the **Intent** tab in **Prompt Research Report** view (opens when you select a prompt in Prompt Volumes) to balance your set across the full funnel. | **Intent Type** | **Example Prompt** | **Best For** | | - | - | - | | **Informational** | “What is Answer Engine Optimization?” | Awareness and education | | **Commercial** | “Best AEO platforms for enterprise marketing” | Mid-funnel comparison | | **Generative / how-to** | “Create a blog outline optimized for AI search” | Task execution | > [!TIP] > > Maintain a healthy mix of intents to capture demand across every stage of discovery. ## Anchor to customer problem areas Pull from CX, Sales, and Support insights to find recurring questions or friction points, and translate those into prompt form using the same phrasing your customers use. For example, if your support team often gets “I don’t understand how visibility scores work,” turn it into: * “How do AI visibility scores work?” * “How can I improve visibility score in ChatGPT answers?” These authentic, problem-driven prompts perform well because they reflect real customer language and context. ## Combine and iterate Once you've mapped volumes, intent, and customer needs: * [Tag and cluster your prompts](/answer-engine-insights/how-tos/create-topics-and-prompts#categorize-your-prompts-with-tags) by topic or funnel stage. * Prioritize those with high AI conversation volume and actionable intent. * Revisit every month: user phrasing evolves as AI adoption grows. Feed your refined prompts into [Profound Agents](/agents/about) or [Answer Engine Insights](/answer-engine-insights/about) to measure visibility gains over time. This creates a continuous feedback loop: Analyze → Act → Measure. # How to create topics and prompts to track in Profound Source: https://docs.tryprofound.com/answer-engine-insights/how-tos/create-topics-and-prompts Build a structured prompt set by defining topics, generating prompts, and uploading them to Profound This guide explains how to build a structured prompt set for tracking in the Profound platform. The process covers defining overarching topics, generating prompts, and uploading them into the platform. > [!TIP] > > Learn more about creating topics and prompts in the [Setting Up Your Topics and Prompts](https://university.tryprofound.com/courses/profound-101/modules/setup/lessons/setting-up-your-topics-and-prompts) lesson, part of Profound University's [Profound 101](https://university.tryprofound.com/courses/profound-101) course. ## How to create topics ### Step 1: Define overarching topics Topics are the high-level themes that shape your monitoring strategy. They should cover the range of areas relevant to your brand and industry. Examples of overarching topics: * **Product or service topics**: project management software, online grocery delivery, skincare products * **Customer use cases or needs**: "tools to collaborate with remote teams," "where to order groceries in under an hour," "face cream for sensitive skin" * **Industry themes or trends**: AI in workplace productivity, sustainable packaging, rise of quick commerce * **Competitors or alternatives**: "Company vs Company," "Instacart alternatives," "Alternatives to Sephora" * **Regions and languages**: think about where you want visibility. For example, prompts for the US market should be in English, while prompts for Spain should be written in Spanish. Consider differences in phrasing across regions. Aim for 5–10 topics to start. Keep them broad enough that each one can branch into multiple prompts. ### Step 2: Generate prompt ideas Once you've defined your topics, expand them into prompts. Use multiple sources to create a well-rounded set. **Use the Profound prompt generator** * Use Profound's generator or other LLMs to create 5–10 prompts for each topic. * Include different types of prompts: * Informational: "What is project management software?" * Comparative: "Best project management software vs Trello" * Problem-solving: "How do I track deadlines in project management software?" * Transactional: "Where can I buy affordable project management tools?" * Generate variations to reflect how users naturally ask similar questions. **Internal FAQs and support data** * Pull frequent customer questions from support or sales teams. * Reframe them into natural prompts. Example: FAQ = "Does the tool integrate with Slack?" → Prompt = "Does project management software integrate with Slack?" Each prompt runs daily by default, and Profound scores it across all selected platforms (ChatGPT, Gemini, Perplexity, and others) and regions. ### Step 3: Upload prompts into Profound After generating and refining prompts, you can upload them into the platform in three ways: **Generate prompts in the platform (best for scaling quickly)** 1. Go to **Answer Engine Insights** → **Prompts** → **Modify Prompts.** 2. From the **Generate** option, create new topics and prompts directly in Profound. 3. Select region and language (for example, US/English or Brazil/Portuguese). 4. Profound generates prompts for you. 5. Review and add them directly to your configuration for tracking. 6. Prompts created here are automatically associated with the selected topic and region, and begin running on the next daily visibility cycle. 7. Best for: exploring new topics or quickly expanding coverage. **Bulk upload (best for large prompt sets)** * Go to **Answer Engine Insights** → **Prompts** → **Modify Prompts**. * Select **Bulk Upload** > **Download template** to download the prompts sheet template. * Fill in the template with your prompts, regions, tags, and languages. Make sure each field (Topic, Prompt, Tags, Regions, Language) appears in a separate column. If all values appear in a single column when you open the file, use "Split text to columns" in Excel or Google Sheets with comma as the delimiter. * Upload the completed file to add all prompts at once. * Best for: adding many prompts across multiple topics and geographies. > [!TIP] > > If you receive an error that "Topic and Prompt are missing," verify that your CSV has each field in its own column. Open the file in Excel or Google Sheets and confirm the headers (Topic, Prompt, Tags, Regions, Language) are separated across the top row, not combined in a single cell. **Manual add/edit (best for smaller updates and refinements)** * Go to **Modify Prompts**, where you already have topics and prompts set up. * Use **Add Topic** or **Add Prompt** to write in new entries individually. * Best for: testing a few new prompts, adding FAQs, or refining specific topics. Visibility, Share of Voice, and Citations metrics populate after the first full 24–48 hour cycle; an initial "No Data" status is normal. After uploading through any method, prompts run daily, with results visible within about 48 hours. Aim to create approximately 15 strategic topics, with around 10 prompts per topic. This balanced approach helps maintain quality while ensuring comprehensive coverage. ### Best practices 1. **Think in topics, not keywords** Group related questions into broader, strategic topics rather than tracking individual keywords. Each topic should represent a clear business theme. **Example**: instead of tracking variations of "cheap flights," create a topic called "Flight pricing and deals" with relevant prompts. 2. **Focus on user intent** Write prompts that reflect natural conversation patterns. Use complete questions or statements rather than short phrases. **Example**: * Less effective: "Cheap flights Europe" * Better: "What's the best way to find affordable flights to Europe?" 3. **Prioritize relevance over volume** Choose fewer, high-impact prompts that align with your strategic goals rather than tracking thousands of low-value variations. **Example**: * Less effective: "Hotel ratings good sites" * Better: "Which travel site has the most accurate hotel ratings?" ## Categorize Your Prompts With Tags ### How to tag prompts Tagging is a powerful way to organize and filter prompts inside Profound. You can add tags in two places: 1. **Excel template (Bulk Upload)** → add tags in the “Tags” column before uploading. 2. **In the platform (Modify Prompts)** → edit an individual prompt or topic and assign tags directly. ### Why tagging matters * **Organization**: Tags help you quickly filter large prompt sets into manageable views. * **Analysis by theme**: See how you perform in a specific area (e.g., competitor comparisons vs. product features). * **Cross-topic tracking**: Some prompts may overlap topics; tags let you track them across multiple dimensions. * **Team collaboration**: Tags make it easier for different teams (e.g., product, PR, marketing) to focus on the prompts that matter to them. ### Tagging guidelines * **Use clear, descriptive labels** * Good: “Competitor Comparison,” “Feature Request,” “Purchase Intent” * Not good: “Misc,” “Random,” “Test” * **A single prompt can have multiple tags** Prompts often belong in more than one topic. Assigning multiple tags to one prompt lets you analyze prompts from various angles without duplicating them. * In the Excel template: put multiple tags in the same cell, separated by commas. Example: Competitor Comparison, Purchase Intent, Project Management * In the Profound platform: assign multiple tags directly to the same prompt when editing. > [!TIP] > > Tag prompts by topic (e.g., “Competitor comparisons,” “Use cases,” “Trends”) so you can group and analyze results easily later. # How to get the best results working with FactCheck Source: https://docs.tryprofound.com/answer-engine-insights/how-tos/factcheck-best-results Best practices for Knowledge Bases, prompts, and review when working with FactCheck ## What makes good FactCheck prompts FactCheck prompts should have a realistic chance of triggering an LLM response that mentions your brand and makes a verifiable, objective claim: a price, a feature, a spec, or a policy. Vague and subjective prompts ("Is Brand X good?") belong in [Sentiment](/answer-engine-insights/sentiment/about). Comparisons ("Brand X vs Y") can work as long as they include verifiable claims. ### Branded vs unbranded prompts > [!NOTE] > > **Branded prompts** — prompts that mention a brand directly. For example: "Does Profound track brand mentions across AI search engines?" > > **Unbranded prompts** — prompts that ask broader category questions and may surface a brand naturally. For example: "What are the best tools for tracking brand visibility in AI search and why?" Branded prompts are recommended but not required. They make it easier to filter for relevant responses and reduce noise. Unbranded prompts are fine when the category is specific enough that the brand is likely to surface anyway (for example, "What is the best AEO tool?"). ### Examples | **Good: factual, specific** | **Bad: vague, subjective** | | - | - | | Can Profound track brand mentions across ChatGPT and Perplexity? | Is Profound a good company? | | How much does Profound's Pro plan cost? | Tell me about Profound. | | What is Profound's refund policy? | What do people think of Profound's customer service? | | Is Profound available in Australia? | What is the best CRM tool? | ## What makes a good Knowledge Base for FactCheck ### Content best practices * Make sure **the information in your Knowledge Base answers the prompts you're tracking** with FactCheck. For example, if you're tracking prompts about pricing, include a pricing page or FAQ that covers it. * Make sure the information in your Knowledge Base **covers all the content** relevant to the prompts you're tracking. If coverage is partial, results degrade in two ways: * Claims about topics your Knowledge Base doesn't cover return as "not relevant" because FactCheck has nothing to verify them against. * Claims about topics it covers only partially may be misclassified. For example, a claim about an old pricing tier might be marked accurate if the Knowledge Base doesn't include the updated pricing page. * **Add your public-facing website** to your Knowledge Base. Knowledge Bases support recrawling on a daily, weekly, or monthly cadence, keeping your source of truth current automatically. Learn more in the [Create and manage Knowledge Bases](/context-manager/manage-knowledge-bases) section. * **Use live, publicly accessible pages you own**, such as help center articles, policy pages, and product pages. Set up an [auto-sync schedule](/context-manager/knowledge-bases-and-brand-kits#content-auto-sync) to keep the content current. ### Limitations * Each FactCheck configuration uses exactly one Knowledge Base, and you can't split verification across several. * You can't change which Knowledge Base is connected to FactCheck after the initial setup. However, its contents stay fully editable: add, remove, or update files at any time, and the next time FactCheck verifies claims, it will check them against the updated content. # Interpret Answer Engine Insights Source: https://docs.tryprofound.com/answer-engine-insights/interpret Read the Visibility, Sentiment, FactCheck, Citations, and Prompts tabs in AEI > [!NOTE] > > This article describes the redesigned Answer Engine Insights. To switch to the original design, go to [Answer Engine Insights settings](/answer-engine-insights/settings) > **Use legacy UI.** Answer Engine Insights (AEI) breaks down your brand's performance across several analytical dimensions. Each dimension has its own tab in the top navigation: Visibility, Sentiment, FactCheck, Citations, and Prompts. [https://player.mux.com/pkFN9Dcdn02027vfw00tAp01oaaemR246A2tfteOSEIgxFk?metadata-video-title=Profound+Answer+Engine+Insights+Walkthrough\&video-title=Profound+Answer+Engine+Insights+Walkthrough](https://player.mux.com/pkFN9Dcdn02027vfw00tAp01oaaemR246A2tfteOSEIgxFk?metadata-video-title=Profound+Answer+Engine+Insights+Walkthrough\&video-title=Profound+Answer+Engine+Insights+Walkthrough) ## Filters Filters are available throughout Answer Engine Insights. They allow you to adjust the analytical time frame, narrow the data view, and save views you return to often. Filters appear as dropdowns beneath the top navigation bar. ![Visibility tab with date range, comparison period, and Topics to Personas filters highlighted](https://mintcdn.com/profound-37face47/LU_swtbqvG5kIsMS/images/answer-engine-insights/interpret-1.png?fit=max\&auto=format\&n=LU_swtbqvG5kIsMS\&q=85\&s=e35b7ab73897e226005177f47225a0a4) ### Date range and comparison period Use the date range filter to select the time window of the answer engine response collection. Choose a preset window (such as **Last 7 Days**) or define a custom range using the calendar selector. After you select a time frame, only answer engine responses generated during that period appear in the charts. Charts show change by comparing the selected time frame to a comparison period. Open the **Prev. Period** dropdown to choose how the comparison period is calculated: * **Prev. Period**: the window immediately before the selected date range, of the same length. * **Prev. Period Last Month**: the same window one month earlier. * **Custom range**: any date range you define. ### Attribute filters Attribute filters narrow the data shown on every chart in the current tab. To apply one, open the dropdown for the attribute (**Topics**, **Platforms**, **Tags**, **Regions**, **Competitors**, or **Languages**) and select the values to include. If your configuration uses [Personas](/answer-engine-insights/personas), a **Personas** filter is also available. Use the **Competitors** filter on the Visibility tab to choose which of the brands you track appear in its charts and rank lists. The Citations tab adds two filters of its own: **Prompt Type** and **Citation Categories**. Select **+** to add more filters to the bar. ### Save view Select **Save view** to store the current combination of date range, comparison period, and filters. Saved views let you return to a specific analysis without rebuilding it each time. ### Export Select **Export** in the top right of the tab to download the underlying data for the current filters. The Visibility, Sentiment, FactCheck, and Prompts tabs export answers. The Citations tab exports citations. ### Settings Select the gear icon in the top right to open Answer Engine Insights settings. See the [Answer Engine Insights settings](/answer-engine-insights/settings) for details. ## The Compare dropdown Most charts in Answer Engine Insights include a **Compare** dropdown in their top right corner. ![Visibility Score chart and rank list by platform with Compare Platforms dropdown highlighted](https://mintcdn.com/profound-37face47/LU_swtbqvG5kIsMS/images/answer-engine-insights/interpret-2.png?fit=max\&auto=format\&n=LU_swtbqvG5kIsMS\&q=85\&s=cc50775cf3da35ab45de015accec67b5) Use it to change how the chart breaks down data. The options are: * **Competitors**: your brand and the brands you track, one line or row per brand. This is the default for the main Visibility chart. * **Platforms**: one line or row per answer engine, such as ChatGPT, Perplexity, or Google AI Overviews. * **Topics**: one line or row per topic. * **Tags**: one line or row per prompt tag. * **Regions**: one line or row per region you track. * **Personas**: one line or row per Persona, if your configuration uses [Personas](/answer-engine-insights/personas). For example, to see how your Visibility Score differs by platform, open the Visibility tab and set the **Compare** dropdown on the Visibility Score chart to **Platforms**. The rank list beside the chart then ranks platforms instead of brands. In the Sentiment and FactCheck tabs, the **Compare** dropdown has additional options: **Themes** and previous period comparison. ![Sentiment Summary chart with Compare dropdown open listing Prev. Period through Personas](https://mintcdn.com/profound-37face47/LU_swtbqvG5kIsMS/images/answer-engine-insights/interpret-3.png?fit=max\&auto=format\&n=LU_swtbqvG5kIsMS\&q=85\&s=af066ec2670b3ab2b575d4a6732d47fc) Each chart has a chart settings icon next to the **Compare** dropdown. Use it to change how the chart visualizes data. ![Chart settings icon highlighted showing Bar Chart, Line Chart, Auto Y-Axis Range, and Table options](https://mintcdn.com/profound-37face47/LU_swtbqvG5kIsMS/images/answer-engine-insights/interpret-4.png?fit=max\&auto=format\&n=LU_swtbqvG5kIsMS\&q=85\&s=efc1ad2fb736014452948976701cde24) ## Visibility The **Visibility** tab breaks down your brand's presence in answer engine responses. ### Visibility Score, Share of Voice, and Average Position The top chart has three sub-tabs that switch the metric: **Visibility Score**, **Share of Voice**, and **Avg Position**. ![Visibility tab with Visibility Score, Share of Voice, and Avg Position metric tabs highlighted](https://mintcdn.com/profound-37face47/LU_swtbqvG5kIsMS/images/answer-engine-insights/interpret-5.png?fit=max\&auto=format\&n=LU_swtbqvG5kIsMS\&q=85\&s=a0582e6965d57d8938e28ed45dad2f12) Each metric appears as a line chart and a rank list. * The line chart shows the metric over the selected date range. Select **Current Period** or **Previous Period** at the bottom of the chart to show or hide either line, and toggle the **Show ...** option to overlay the brands you track. * The rank list shows your brand's rank by the selected metric relative to competitors, with the change versus the comparison period. Select **Expand** to see the full list. When the chart compares topics or tags, select a row to open that topic or tag's subpage. Use the **Compare** dropdown to pivot the chart and rank list by platforms, topics, tags, regions, or Personas. ### Visibility Trends **Visibility Trends** shows the largest movements in Visibility Score during the selected period, split into **Biggest Spikes** and **Biggest Drops**. Each item shows a sparkline, the current score, and the change versus the comparison period. ![Visibility Trends panel listing Biggest Spikes and Biggest Drops by topic with sparklines](https://mintcdn.com/profound-37face47/LU_swtbqvG5kIsMS/images/answer-engine-insights/interpret-6.png?fit=max\&auto=format\&n=LU_swtbqvG5kIsMS\&q=85\&s=fb8078bd9f74dbca1ef22862416b091a) By default the trends compare topics. Use the **Compare** dropdown to see the biggest movers across competitors, platforms, tags, regions, or Personas instead. ### Visibility Ranking Visibility Ranking is a customizable heat map that shows how two dimensions intersect, for example how each platform performs in each topic. Configure it with the controls above the table: * **Value**: show the Visibility Score as a percentage, or show rank instead. * **Rows**: the dimension shown as rows, such as topics, tags, regions, or platforms. * **Columns**: the dimension shown as columns, such as competitors or platforms. Darker cells indicate higher values. ![Visibility Ranking heatmap with Matrix and Table toggle and Value, Rows, Columns dropdowns highlighted](https://mintcdn.com/profound-37face47/LU_swtbqvG5kIsMS/images/answer-engine-insights/interpret-7.png?fit=max\&auto=format\&n=LU_swtbqvG5kIsMS\&q=85\&s=59aa289c2cefd5caa3b7a8e745251a8f) Select **Table** to view the same data in a standard rank table. Expand the topics to see the ranking of their prompts. Select a prompt to open it's Prompt Analysis view with visibility metrics, executions and citations. ![Visibility Ranking table view with AI Agents topic expanded to show prompts ranked by platform](https://mintcdn.com/profound-37face47/LU_swtbqvG5kIsMS/images/answer-engine-insights/interpret-8.png?fit=max\&auto=format\&n=LU_swtbqvG5kIsMS\&q=85\&s=74fb40ffe584c3af5d6bc5f2ff70dce3) ### Topic Prioritization Topic Prioritization plots each topic by its Visibility Score and Citation Share so you can decide where to focus. ![Topic Prioritization scatter plot of citation share versus visibility with four quadrants](https://mintcdn.com/profound-37face47/LU_swtbqvG5kIsMS/images/answer-engine-insights/interpret-9.png?fit=max\&auto=format\&n=LU_swtbqvG5kIsMS\&q=85\&s=d1fa72ea965ab6926301e28b69e4859b) The matrix splits topics into four groups: | Group | What it means | | - | - | | Strongholds | High visibility and high citation share. Maintain your position. | | Needs attention | Low visibility and low citation share. Content and citation work are both needed. | | Cited, Not Visible | Your content is cited, but your brand isn't mentioned in the answer. Review how the cited pages present your brand. | | Visible, Not Cited | Your brand is mentioned, but answer engines cite other sources. Build content that answer engines can cite. | Select **Table** above the plot to view the same data as a ranked list. ## Citations The **Citations** tab assesses how often answer engine responses cite your domains, and which other sources they rely on. ### Citation Share and Citation Coverage The top chart has two sub-tabs that switch the metric: **Citation Share** and **Citation Coverage**. ![Citations tab with Citation Share and Citation Coverage tabs highlighted above chart and rank list](https://mintcdn.com/profound-37face47/LU_swtbqvG5kIsMS/images/answer-engine-insights/interpret-10.png?fit=max\&auto=format\&n=LU_swtbqvG5kIsMS\&q=85\&s=c48fa730fdfd8404e90a793063eb4e2a) Each metric is displayed as a line chart and a rank list. * The line chart shows the metric over the selected date range. Select **Current Period** or **Previous Period** at the bottom of the chart to show or hide either line, and toggle the **Show ...** option to overlay other domains. * The **Citation Share Rank** list ranks the most cited domains, with your owned domains marked **Owned**. Select **Expand** below the table to see the full list. By default the chart compares websites. Use the **Compare** dropdown to pivot by platforms, topics, tags, regions, or Personas. ### Citation Categories Citation Categories classify the sources AI platforms cite, helping you understand where your visibility comes from and identify opportunities. The **Citation Share by Category** chart shows the share of citations for each category. Use the chart settings on the top right of the chart to switch to a line chart and see how each category trends over time. ![Citation Categories bar with chart settings icon highlighted showing Bar Chart and Line Chart options](https://mintcdn.com/profound-37face47/LU_swtbqvG5kIsMS/images/answer-engine-insights/interpret-11.png?fit=max\&auto=format\&n=LU_swtbqvG5kIsMS\&q=85\&s=73ad3dda9fab5fbf3a242672c81bc9e7) **Owned**, **Competition**, and **Custom** categories are defined in [Answer Engine Insights settings](/answer-engine-insights/settings). All other categories are assigned automatically but can be overridden in settings. | **Category** | **Definition** | **Includes** | | - | - | - | | Owned | Websites and digital properties directly owned, controlled, or managed by your brand or its related entities. | Primary domains, subdomains, product microsites, help centers, documentation sites | | Competition | Websites belonging to or controlled by competitors your brand tracks. | Competitor homepages, blogs, press sections, resource pages | | Earned Media | Sites whose primary purpose is publishing content. A marketer can identify a site owner, editor, or publisher to partner with. Content is the product, monetized via ads, affiliate revenue, or subscriptions. Does not include corporate blogs, company newsrooms, or lead generation sites. | News outlets, magazines, trade publications, editorial review sites (Wirecutter, PCMag), affiliate and comparison sites (NerdWallet, Investopedia), broadcast media, contributor-model publications (Forbes, HuffPost), personal blogs | | PR Wire | Press release distribution services that syndicate company announcements to media outlets. | PR Newswire, Business Wire, GlobeNewswire, Accesswire, and other major PR wires | | Institution | Government, educational, research, or public-interest nonprofit organizations. Institutional TLDs are auto-classified: .gov, .edu, .mil, .int, .gov.*, .ac.*, .nhs.*, .gouv.*, .gob. | Government sites, universities, research institutions, academic publishers (Nature, arXiv), international bodies (UN, WHO), professional associations (ABA, AMA), mission-driven nonprofits (Red Cross, UNICEF), Wikipedia | | Social | Platforms where users publish freely and visibility is determined by votes, algorithms, or follower graphs. Does not include vendor-owned support forums or e-commerce product reviews. | Social networks (Facebook, Instagram, X/Twitter, TikTok, LinkedIn), video platforms (YouTube), discussion platforms (Reddit, Discord), Q\&A platforms (Quora, Stack Overflow), open publishing platforms (Medium, Substack), consumer review aggregators (Yelp, TripAdvisor), B2B review aggregators (G2, Capterra, TrustRadius) | | Other | Sources that don't fit the above categories, typically where content exists to support selling products or services. Domains with fewer than 100 total citations are also classified as Other. | Corporate websites, SaaS, e-commerce, service businesses, company blogs and newsrooms, vendor-owned forums, marketplaces (Airbnb, Etsy), course platforms (Coursera, Udemy), job boards, directories, industry trade groups, lead generation sites | | Custom | Categories you create to track specific domains or pages. | Any domains or pages you specify | ### All Citations All Citations is a ranked table of every cited source in the selected period. Use the search box above the table to find a domain or page, the settings icon to adjust the table, and the download icon to export it. ![All Citations table with Domains, Pages, Watchlist tabs and search domains field highlighted](https://mintcdn.com/profound-37face47/LU_swtbqvG5kIsMS/images/answer-engine-insights/interpret-12.png?fit=max\&auto=format\&n=LU_swtbqvG5kIsMS\&q=85\&s=196262c754cb88bf1cb3fa2d0664602d) Switch between three views: * **Domains**: the most frequently cited domains. Each row shows the domain, its category, its citation share, and any citation tags. Domains with several cited subdomains show the subdomain count. * **Pages**: the most referenced individual URLs. Multiple pages from the same domain can appear in this list. * **Watchlist**: specific URLs you choose to track for citation performance. While Pages lists the most cited pages overall, the Watchlist lets you define and monitor a custom set of URLs. ### Citation Decay Citation Decay shows how long sources keep getting cited after they first appear. Switch between **Domains** and **Pages**. The summary at the top shows the **Average Rise** (days from first citation to peak citation count) and **Average Half-life** (days for citations to fall to half of their peak and stay there) across all sources. ![Citation Decay panel with Domains and Pages tabs, Average Rise and Average Half-life highlighted](https://mintcdn.com/profound-37face47/LU_swtbqvG5kIsMS/images/answer-engine-insights/interpret-13.png?fit=max\&auto=format\&n=LU_swtbqvG5kIsMS\&q=85\&s=4eac831e50633d260738812b527c7ba6) Each row shows the share trend, the date the source was first cited, its rise in days, peak share, peak date, half-life in days, and the date it was last cited. Use this table to spot content that is losing traction and content that answer engines have recently picked up. ### Citation Ranking Citation Ranking is a customizable heat map of citation share across two dimensions, for example how much each domain is cited within each topic. Configure it with the **Value**, **Rows**, and **Columns** controls, the same way as Visibility Ranking. ![Citation Ranking matrix with Value, Rows, and Columns selectors highlighted above the share heatmap](https://mintcdn.com/profound-37face47/LU_swtbqvG5kIsMS/images/answer-engine-insights/interpret-14.png?fit=max\&auto=format\&n=LU_swtbqvG5kIsMS\&q=85\&s=44d34e4a4df37c82cad5244ca72538ba) Select **Table** to switch to a standard rank table. ![Citation Ranking with the Table tab highlighted, showing ranked domain icons per topic](https://mintcdn.com/profound-37face47/LU_swtbqvG5kIsMS/images/answer-engine-insights/interpret-15.png?fit=max\&auto=format\&n=LU_swtbqvG5kIsMS\&q=85\&s=1d642a05d278a9d3b05a6a50f0d62c35) ### Citation Relationships The Citation Relationships chart visualizes how citations are connected across answer engines and topics. Select **3D** or **2D**, then select **Show Graph** to render it. ![Citation Relationships graph with the 3D and 2D view toggle highlighted](https://mintcdn.com/profound-37face47/LU_swtbqvG5kIsMS/images/answer-engine-insights/interpret-16.webp?fit=max\&auto=format\&n=LU_swtbqvG5kIsMS\&q=85\&s=3e0554d4362b07ad615526d4260be660) Clusters represent groups of cited sources that share mentions for a particular topic and platform. For example, if your brand is mentioned in two different publications that are both cited by AI answer engine platforms, those publications appear in the same cluster. ## Prompts The **Prompts** tab shows performance for every prompt you track, and the queries answer engines generate from them. ![Prompts tab, Tracked prompts table grouped by topic with Visibility Score and Share of Voice columns](https://mintcdn.com/profound-37face47/LU_swtbqvG5kIsMS/images/answer-engine-insights/interpret-17.png?fit=max\&auto=format\&n=LU_swtbqvG5kIsMS\&q=85\&s=3d4b1ea0c79744aa0a55f322a3d28ff0) ### Tracked prompts The **Tracked prompts** table groups prompts by topic. Expand a topic to see the prompts within it. Each row shows Visibility Score, Visibility Rank, Share of Voice, Share of Voice Rank, Average Position, Citation Share, Citation Rank, Executions, and Prompt Volume, each with its change versus the comparison period. Sort the table by a metric's current value or by its change versus the comparison period. Controls above the table: * **Prompt type**: filter to prompts with a given analysis type, such as Visibility, Sentiment, or FactCheck. * **Search topics**: find a topic or prompt by name. * **Download icon**: export the table. * **Modify prompts**: open the Prompt Designer to add, edit, or tag prompts. * **Settings icon**: change **Group by** (for example, topic) and **Customize columns**. Learn more about managing prompts in [Create, manage and tag prompts](/answer-engine-insights/prompt-designer). ### Query fanouts Answer engines often turn a single prompt into several search queries before they answer. The **Query fanouts** view shows those queries for each prompt you track. Each row is a prompt, with its **Query Count** (the number of distinct queries generated in the period) and **Average Queries Per Execution**. Expand a prompt to see the individual queries. Select **View all** to view all queries for a prompt. ![Query fanouts tab with Query Count and Avg Queries Per Execution columns and View all button highlighted](https://mintcdn.com/profound-37face47/LU_swtbqvG5kIsMS/images/answer-engine-insights/interpret-18.png?fit=max\&auto=format\&n=LU_swtbqvG5kIsMS\&q=85\&s=ff1b9a620611fd540aed0db08661b35e) Use this view to understand how answer engines interpret your prompts and which underlying searches your content needs to rank for. To see the more detailed analysis of a prompt, hover over it and select **Analyze**. ![Query fanouts row with the Analyze button highlighted next to a prompt](https://mintcdn.com/profound-37face47/LU_swtbqvG5kIsMS/images/answer-engine-insights/interpret-19.png?fit=max\&auto=format\&n=LU_swtbqvG5kIsMS\&q=85\&s=600cac5f8e2ea278fbbba43bb8e211c7) This opens the **Query Fanout Analysis** view for the prompt. Select Show Prompt Diffs to compare how queries changed across executions. ![Query Fanout Analysis panel with View Executions button and Show Prompt Diffs toggle highlighted](https://mintcdn.com/profound-37face47/LU_swtbqvG5kIsMS/images/answer-engine-insights/interpret-20.png?fit=max\&auto=format\&n=LU_swtbqvG5kIsMS\&q=85\&s=95974ab052582d8d14962faece85be42) Select **View Executions** for a more detailed prompt executions analysis. The metrics you see depend on your prompt type. For example, for a FactCheck prompt, it's the accuracy-related views and claim analysis, and for a Visibility prompt it's Visibility Score and visibility and citations breakdown. ![Prompt Analysis panel with Accuracy Score tab, Accuracy Score Rank, and Inaccurate Claims highlighted](https://mintcdn.com/profound-37face47/LU_swtbqvG5kIsMS/images/answer-engine-insights/interpret-21.png?fit=max\&auto=format\&n=LU_swtbqvG5kIsMS\&q=85\&s=296590081141ccedc8425a3c992a47d2) ## Sentiment The **Sentiment** tab tracks how answer engines describe your brand. Learn more in [About Sentiment](/answer-engine-insights/sentiment/about) and ​the [Get started with Sentiment](/answer-engine-insights/sentiment/getting-started) guide. ## FactCheck The **FactCheck** tab tracks the accuracy of what answer engines say about your brand. Learn more in [About FactCheck](/answer-engine-insights/factcheck/about) and the [Get started with FactCheck](/answer-engine-insights/factcheck/getting-started) guide. ## Investigate charts with AI Marketer To ask [AI Marketer](/aim/about) to interpret a chart, select a point or a date range on it, then select **Investigate**: * To investigate a single date, click a point on a line chart to pin that date. * To investigate a period, click and drag across points on a line chart to select a date range. ![Citation Share bar chart with the Investigate option highlighted in a bar tooltip](https://mintcdn.com/profound-37face47/LU_swtbqvG5kIsMS/images/answer-engine-insights/interpret-22.png?fit=max\&auto=format\&n=LU_swtbqvG5kIsMS\&q=85\&s=71a34565997edf70bb5b95c02ff48067) Profound opens AI Marketer in the side panel and sends a prompt that includes the chart and the date or date range you selected, so you can ask what drove the change. Investigate is available in most charts, including the Visibility, Sentiment, FactCheck, Citations, and Query fanouts charts. > [!TIP] > > Learn how to prompt AI Marketer in [Writing prompts for AI Marketer (Aim): best practices and examples](/aim/writing-prompts). Select **View citations** (or **View executions** in Visibility tab) to view the underlying data for that point in the chart. ![Citation Share bar chart with the View citations option highlighted in a bar tooltip](https://mintcdn.com/profound-37face47/LU_swtbqvG5kIsMS/images/answer-engine-insights/interpret-23.png?fit=max\&auto=format\&n=LU_swtbqvG5kIsMS\&q=85\&s=ca491a5abdf86904ea3fb9f58c0ad709) Filter and group the data in the **All data** view using the options above the table. ![All data citations view with Citations tab, filters, Aggregate by, and Search urls highlighted](https://mintcdn.com/profound-37face47/LU_swtbqvG5kIsMS/images/answer-engine-insights/interpret-24.png?fit=max\&auto=format\&n=LU_swtbqvG5kIsMS\&q=85\&s=42633ad2f81ddfce01e7788725cabc03) ## Annotate charts Chart annotations are notes pinned to dates on time-series line charts. They show what happened, such as a launch, a model change on an AI platform, or a prompt update, next to the trend it may have affected. Learn more in [Chart annotations in AEI](/answer-engine-insights/chart-annotations). # Personas in Answer Engine Insights Source: https://docs.tryprofound.com/answer-engine-insights/personas Use audience profiles to see how answers change by who is asking A Persona is an audience profile: the demographics, employment, and behavior of the person asking an answer engine a question. Add Personas to prompts to simulate the context an answer engine has about a user, so you can see how brand mentions, citations, and sentiment change by audience. ## Quick facts * When you add a Persona to a prompt, Profound adds the Persona's details to the prompt text and **runs it as a separate prompt**. Each Persona on a prompt adds a prompt run. This affects your prompt limits. * The baseline for a prompt is **No Persona**: it runs without any Persona context. * Personas belong to a category. By default, you can create **up to three Personas per category**. Contact your Profound team to raise the limit or to add Personas to your plan. * New Persona runs start with the next daily prompt run, so expect the first Persona data in [Answer Engine Insights](/answer-engine-insights/about) to appear after the next processing cycle. ## Add a new Persona ![Visibility tab Personas filter dropdown with Manage personas option highlighted](https://mintcdn.com/profound-37face47/V1WOgGibXMwY4fKe/images/answer-engine-insights/personas-1.png?fit=max\&auto=format\&n=V1WOgGibXMwY4fKe\&q=85\&s=eb2cce203e577a12d9ccb4fe7020c374) 1. In [Answer Engine Insights](/answer-engine-insights/about), select **Personas** in the filter bar, then select **Manage Personas**. 2. Select **+ Create New**. > [!TIP] > > If **+ Create New** is disabled, you may have reached your Personas limit. Contact your Profound team to explore your options. 3. Enter a **Name** (up to 50 characters). 4. Fill in the fields that shape how an answer engine reads the prompt: **Demographics** (Gender and Age Range), **Employment** (Company Size, Industry, Role Seniority, and Job Title), and **Behavior** (Motivations and Pain Points, up to 500 characters each). 5. Select **Save**. Fill in only the details that change how an answer engine interprets the prompt. Motivations and Pain Points carry the most weight. ## Manage and delete Personas **Manage Personas** lists every Persona in the category with its details, the number of prompts it runs on, and when it was last edited. Open the **Actions** menu (**…**) on a Persona to: * **Edit**: change any field, then select **Save**. * **Duplicate**: create a copy in the same category. * **Export**: download the Persona's details. * **Delete**: remove the Persona and stop its prompt runs. Personas are specific to a category, so to use the same Persona elsewhere, create it again in that category. ## Add Personas to prompts Assign Personas in the [Prompt Designer](/answer-engine-insights/prompt-designer). ### One prompt Select the prompt's **Personas** cell, check or uncheck the Personas you want to apply, then select **Save**. ![Prompt Designer with Personas column dropdown and Save button highlighted](https://mintcdn.com/profound-37face47/V1WOgGibXMwY4fKe/images/answer-engine-insights/personas-2.png?fit=max\&auto=format\&n=V1WOgGibXMwY4fKe\&q=85\&s=9968d1e50f324e511279df49eee2b356) ### Several prompts 1. Check the prompts you want to change. 2. In the bar at the bottom, select **Edit** > **Personas**. ![Prompt Designer with four prompts selected and Edit menu showing Personas highlighted](https://mintcdn.com/profound-37face47/V1WOgGibXMwY4fKe/images/answer-engine-insights/personas-3.png?fit=max\&auto=format\&n=V1WOgGibXMwY4fKe\&q=85\&s=71c62b66efce118cc36ba666cb332f64) 3. Select the Personas, then choose **Add Personas**, **Replace Existing**, or **Remove**. ![Persona picker with Add Persona, Replace Existing, and Remove buttons highlighted](https://mintcdn.com/profound-37face47/V1WOgGibXMwY4fKe/images/answer-engine-insights/personas-4.png?fit=max\&auto=format\&n=V1WOgGibXMwY4fKe\&q=85\&s=b8967ba8bfebab513a55eb673fae88d7) 3. Select **Save**. Removing a Persona from a prompt stops that Persona's runs for the prompt. The data collected for that prompt and persona is no longer visible in Answer Engine Insights. ## Analyze topics and prompts by Persona To analyze prompts by Persona, use the **Personas** [filter](/answer-engine-insights/interpret#filters) in [**Answer Engine Insights**](/answer-engine-insights/about) **> Prompts**. Then, select **Analyze** on any topic. ![Prompts tab with Personas filter highlighted and dropdown listing five personas](https://mintcdn.com/profound-37face47/V1WOgGibXMwY4fKe/images/answer-engine-insights/personas-5.png?fit=max\&auto=format\&n=V1WOgGibXMwY4fKe\&q=85\&s=73e470e9ede9cb585602f986b39de557) To view the visibility and citations data for Personas, select [**Compare**](/answer-engine-insights/interpret#the-compare-dropdown) > **Personas** in the **Visibility** and **Citations** tabs. ![Visibility Score chart with Compare Personas dropdown highlighted and rank list by persona](https://mintcdn.com/profound-37face47/V1WOgGibXMwY4fKe/images/answer-engine-insights/personas-6.png?fit=max\&auto=format\&n=V1WOgGibXMwY4fKe\&q=85\&s=75d65b5175a98e80c1307d1bec8265ae) Filtering by Persona applies to [Sentiment](/answer-engine-insights/sentiment/about) and [FactCheck](/answer-engine-insights/factcheck/about) data as well, if you have at least one Persona configured. Access the filter in the [top filters bar](/answer-engine-insights/interpret#filters) in the **Sentiment** and **Factcheck** tabs. ![FactCheck tab with Personas filter highlighted and Accuracy Score chart](https://mintcdn.com/profound-37face47/V1WOgGibXMwY4fKe/images/answer-engine-insights/personas-7.png?fit=max\&auto=format\&n=V1WOgGibXMwY4fKe\&q=85\&s=c50822e6896489f032f39477f5bdf7ca) > [!TIP] > > Learn more about filtering and interpreting data in [Interpret Answer Engine Insights](/answer-engine-insights/interpret). # Create, manage, and tag prompts in Prompt Designer Source: https://docs.tryprofound.com/answer-engine-insights/prompt-designer Add, edit, tag, and manage prompts in Prompt Designer > [!NOTE] > > **Available on:** the Enterprise plan > > **Find it in:** Answer Engine Insights > Prompts > Modify prompts > > **Required role:** Admin, Editor or custom Prompts are the queries that Profound sends to answer engines to create your Profound dataset. [Answer Engine Insights (AEI)](/answer-engine-insights/about) data comes from these prompts, so it is important to closely maintain them. Create, modify, tag, and manage prompts in the Prompt Designer. Access it from the **Prompts** tab in Answer Engine Insights or [Answer Engine Insights settings](/answer-engine-insights/settings). > [!NOTE] > > If you don't see the **Modify prompts** option, you may not have permission to work with prompts. Learn more in [Roles and Permissions](/platform-config/people/roles-and-permissions). ## Create prompts There are three ways to add prompts to Profound: upload, generate, or add the prompts manually. ![Prompt Designer prompt list with Generate, Upload, and Add prompt buttons highlighted](https://mintcdn.com/profound-37face47/V1WOgGibXMwY4fKe/images/answer-engine-insights/prompt-designer-1.png?fit=max\&auto=format\&n=V1WOgGibXMwY4fKe\&q=85\&s=1fb6a66821113a7539a2a36f8ba8071e) New prompts typically need 24–48 hours to accumulate data after being added. Prompts refresh once per day on Eastern Time, so you should expect to see initial visibility data in [AEI](/answer-engine-insights/about) after the next daily processing cycle completes. ### Upload Select  **Upload > Add new prompts** on the top right of the prompts table to upload a CSV file containing your prompts. Format the CSV with these columns: | **Column** | **Required** | **Definition** | | - | - | - | | Topic | Yes | Key concept or area of focus that you want to rank for in AI answers | | Prompt | Yes | An individual query to be sent to answer engines | | Tags | No | One or more tags to assign to the prompt for filtering within the platform | | Regions | No | One or more regions where the prompt should be run | | Language | No | A two-letter [ISO language code](https://www.loc.gov/standards/iso639-2/php/langcodes-search.php) followed by a two-letter [country code](https://www.iso.org/obp/ui/#search) (`en-US` for US English) | Download the template prompts file with all necessary columns from the CSV upload window. ![Upload CSV step with Download template button highlighted and Upload file drop area](https://mintcdn.com/profound-37face47/V1WOgGibXMwY4fKe/images/answer-engine-insights/prompt-designer-2.png?fit=max\&auto=format\&n=V1WOgGibXMwY4fKe\&q=85\&s=35908272bba6a63cb60caa9ac0b72697) **CSV upload troubleshooting** If you see a "Topic and Prompt missing" error during bulk upload, verify that your CSV has data properly separated into columns rather than all combined in a single column. Open the file in Excel or Google Sheets to check the column structure. Make sure: * Each field (Topic, Prompt, and so on) appears in its own column * If all data appears in one column, use "Split text to columns" with comma as the delimiter * Alternatively, re-save the file ensuring it uses proper comma delimiters between fields ### Generate prompts Use Prompt Generator to create prompts from existing topics: select **Generate** on the top-right of the prompts table. In the generator, specify the topics that you want to create prompts for and configure regions, languages, and platforms you want the prompts to be run in. Specify any additional instructions for the prompt generator in the **Additional Instructions** section. > [!TIP] > > Review the autogenerated prompt preview, then click **Upload and run** to finish the setup and make sure the prompts don't get stuck in an incomplete state. ### Add prompts manually Select **+ Add Prompt** on the top-right of the prompts table, or type in the prompt text and configure the prompt attributes directly in the first row of the prompts table (*“Add a new prompt…”*). ![Prompt Designer with Add prompt button and Add a new prompt row highlighted](https://mintcdn.com/profound-37face47/V1WOgGibXMwY4fKe/images/answer-engine-insights/prompt-designer-3.png?fit=max\&auto=format\&n=V1WOgGibXMwY4fKe\&q=85\&s=a9ddd70365888f3e0c56d045656b302f) ## Modify or delete prompts To modify existing prompts, select the cell containing the data you want to update in the prompts table. To edit or delete prompts in bulk, select the prompts, and then select the action you want to perform from the options at the bottom of the table. ![Prompt list with four prompts selected and Edit, Translate, Disable, Duplicate, Delete bar highlighted](https://mintcdn.com/profound-37face47/V1WOgGibXMwY4fKe/images/answer-engine-insights/prompt-designer-4.png?fit=max\&auto=format\&n=V1WOgGibXMwY4fKe\&q=85\&s=f32ef52e6d80106bdf0d53d08dd53f2b) To edit the prompts by uploading a CSV file, select **Upload > Edit existing prompts** at the top right of the prompts table and upload the file as instructed in the Upload section above. ## Tag prompts Tags create an additional layer of organization for prompts inside Profound. Learn more in [creating topics and prompts guide](/answer-engine-insights/how-tos/create-topics-and-prompts#categorize-your-prompts-with-tags). To add tags to prompts, in the Prompt Designer table, select the **Tags** cell for a prompt, then select the tags you want to add or remove, or type a name for a new tag to add it to the tag list. When editing the prompts in bulk with the CSV file, include a `Tags` column into the file to add and remove the tags for all prompts in the file. ## Use Personas with prompts Personas let you test how an answer engine responds when the same prompt is run with additional audience context, such as a job role or decision-maker profile. To assign Personas to a prompt, select the **Personas** cell for that prompt in the Prompt Designer table and select the Personas to apply. To create or edit Personas, select **Manage Personas** at the bottom of the same menu. Learn more in [Personas in Answer Engine Insights](/answer-engine-insights/personas). > [!NOTE] > > Adding Personas to prompts affects your prompt limits. If you assign one Persona to all prompts, you are effectively creating an additional run for each of those prompts. ## How prompt changes affect reporting Prompt reporting is based on the prompts that are currently in your configuration. If you add, remove, or substantially rewrite prompts, the totals you see in Profound can change as well: * **Adding prompts** increases the number of tracked questions and can raise aggregate counts after the next processing cycle. * **Removing prompts** excludes those questions from current totals, which can make counts drop compared with an older export or snapshot. * **Rewriting prompts** can change what Profound matches and measures, so results may no longer be directly comparable with earlier versions. * **Changing tags** does not change the underlying prompt data by itself, but it can change which subset of prompts you are viewing if you filter by tag. * **Adding Personas** increases the number of prompt executions because Profound runs the base prompt and the Persona-context version separately. Personas help you compare how responses differ for a given audience, but topics and tags still act as organization and filtering tools rather than prompt context. If you need stable period-over-period comparisons, keep the prompt set consistent for the reporting window or export a snapshot before making large prompt changes. ## Topics Topics are groups of prompts organized around a common theme. For example, a collection of different prompts all inquiring about data accuracy can be organized within a "Data Accuracy" topic. Learn more about topics in [How to create topics and prompts to track in Profound](/answer-engine-insights/how-tos/create-topics-and-prompts). To manually add a new topic, select the **+** option next to **All Topics** in the Prompt Designer. ![Prompt Designer topics panel with Add topic plus button highlighted next to All Topics](https://mintcdn.com/profound-37face47/V1WOgGibXMwY4fKe/images/answer-engine-insights/prompt-designer-5.png?fit=max\&auto=format\&n=V1WOgGibXMwY4fKe\&q=85\&s=7c37bc3b2892cf73d8dafcebed35b435) After you enter the topic name, it's available to populate with prompts. Select the **…** action menu next to the topic name to rename or delete the topic. ![Topic context menu with Rename and Delete options highlighted next to LLM Optimization](https://mintcdn.com/profound-37face47/V1WOgGibXMwY4fKe/images/answer-engine-insights/prompt-designer-6.png?fit=max\&auto=format\&n=V1WOgGibXMwY4fKe\&q=85\&s=325c108b3c28b2829972f82932efda28) > [!TIP] > > Topics and prompts in Profound can be exported in CSV or JSON format. Learn more in [Export prompts and topics](/answer-engine-insights/export-prompts-and-topics).​ # About Sentiment Source: https://docs.tryprofound.com/answer-engine-insights/sentiment/about How Sentiment tracks the narrative AI engines build around your brand > [!NOTE] > > **Available on:** all plans > > **Find it in:** Analytics > Answer Engine Insights > Sentiment tab Sentiment is a part of [Answer Engine Insights](/answer-engine-insights/about) that goes beyond tracking whether your brand appears in AI responses to tracking the tone and content of how AI platforms talk about your brand. The feature surfaces how AI platforms rate and describe your brand: an overall sentiment score, themes that AI engines consistently associate with your brand, and the attributes within each theme that carry positive or negative signals. It also scans the citations behind AI responses so you can see which sources are shaping the narrative. ## What Sentiment measures When an AI engine mentions a brand, it does more than cite it. It describes strengths, limitations, and use cases based on the sources it draws from. That framing shapes how potential customers perceive your brand before they ever visit your site. Sentiment helps you understand: * Whether the tone is positive or negative, and how that changes over time * Which specific themes AI engines surface about your brand, such as pricing, customer support, or product quality, and the attributes within each theme that carry positive or negative signals, such as “opaque pricing” (negative) or “responsive support” (positive) * Whether negative themes come from the content of a single outdated cited page or reflect a broader pattern, so you can address the right root cause and take action immediately * How your brand's sentiment compares to competitors, broken down by AI platform and topic ## How it works ### Which prompts get analyzed Profound gathers Sentiment data from prompts assigned the **Sentiment type**. The Sentiment type can be applied to any prompt in your account, including prompts you configure manually. When a prompt is marked with this prompt type, Profound analyzes the response for any brands mentioned and extracts sentiment from it. > [!TIP] > > To assign the Sentiment prompt type to a prompt, select a prompt in the [Prompt Designer](/answer-engine-insights/prompt-designer#use-personas-with-prompts), click on **Edit > Analysis Types**, and select **Sentiment** in the dropup menu. This means Sentiment data can come from any prompt. For example, a prompt like "What are the best corporate credit cards for small businesses?" might return a response that mentions a competitor but notes that their foreign transaction fees are too high. Profound picks that up and counts it as a negative attribute under a pricing theme. ### Prompt limits and timing for Sentiment prompts Sentiment prompts count toward the same total prompt allowance as other tracked prompts in your account. New prompts and prompt configuration changes usually appear in reporting after the next daily processing cycle, and initial data may take 24-48 hours to accumulate. ### Extracting themes from AI responses AI responses are processed by extracting raw claims, semantically grouping them into clusters determined by the data, and surfacing the themes and attributes that are statistically significant. The overall sentiment score is the average of positive sentiment across each tracked AI model (ChatGPT, Gemini, and others). The claims extracted from AI responses are weighted by mention frequency: a positive claim mentioned 100 times has 10 times the influence on a theme's sentiment compared to a negative one mentioned 10 times. Because themes are built from aggregated claims, a theme that appears more frequently across responses naturally carries more weight in the overall score. ## Key Features ### Themes and theme attributes A theme is a neutral, high-level topic area that AI engines associate with a brand, such as "Customer Support" or "Pricing." Under each theme, attributes capture the specific claims and patterns that make up that theme, such as "long response times" or "opaque pricing," each with a positive or negative polarity. This hierarchy is determined by the data: raw claims from AI responses are extracted, semantically grouped into clusters, and only statistically significant groupings are surfaced. The result is a clean, actionable structure that identifies exactly what is driving a positive or negative signal. ### Exact text surfacing When a sentiment signal is detected, Profound surfaces the exact text from the AI engine's response that the sentiment originates from. This removes ambiguity: instead of inferring why a theme is positive or negative, you can read the precise language the AI used. ### Citation-level attribution For each sentiment signal, Profound identifies which specific citations are driving it, whether for an overall score or for a particular theme. The platform shows not just which source was cited, but where on that page the sentiment originates. This is the primary tool for distinguishing a content problem (one article driving a narrative) from a product or service problem (multiple independent sources reflecting the same issue). ### Negative Sentiment Drivers The Negative Sentiment Drivers table shows the most cited web pages containing your top negative claims. It's useful as an actionable priority list of citation sources driving your negative sentiment. Drill down to investigate each claim, or use the Suggested Actions column to have an Agent built automatically to address negative sentiment in each citation source. ### Competitive comparison Because Sentiment prompts run across your full competitor set, you can compare your brand's sentiment themes directly against competitors within the same view. This includes both the overall positive or negative split and the specific attributes AI engines surface for each brand. ### Time series by theme and competitor Visualize sentiment trends over time, grouped by theme or by competitor. This lets you spot when a particular theme started trending negatively, correlate shifts with external events or content changes, and track whether corrective actions are working. ## Language and region support Sentiment analysis supports prompts and themes across multiple languages and regions: it runs in the user's native language. Theme names in the **Themes** table appear in English, as these are labels generated by the Profound platform, but this does not affect the sentiment analysis itself. Prompts grouped under a theme are displayed in the language in which they were run and analyzed. # Sentiment FAQ Source: https://docs.tryprofound.com/answer-engine-insights/sentiment/faq Frequently asked questions about Sentiment in Answer Engine Insights > **Can the platform track sentiment for specific user personas or audience segments?** > > Yes. Profound supports Personas as a filter in the Sentiment tab. Learn more in [Personas in Answer Engine Insights](/answer-engine-insights/personas). > **Can I track specific negative themes like cost concerns or safety issues, and see which AI models surface them?** > > Yes. Click into any theme in the Sentiment tab and add a Platforms filter with the specific AI platforms you want to track. > **Does the platform monitor sentiment from third-party review sites like Trustpilot?** > > Yes. Profound crawls Trustpilot and similar review sites directly. When those pages are cited in AI engine responses, they appear in the source attribution for the relevant theme, and you can see exactly where on the page the sentiment originates. > **Is there a limit to how many competitors I can track for sentiment analysis?** > > There's no hard limit, but the standard maximum is 10 competitors. In most cases, tracking three to five competitors is recommended. > **How can I influence what AI says about my brand?** > > AI engines synthesize brand reputation from their training data and real-time web citations. The most effective ways to influence sentiment are earning positive coverage in frequently cited domains, creating content that directly addresses known negative themes, and updating outdated third-party content that is driving negative narratives. Brand-owned content is less effective when a negative theme is driven by many independent cited sources. # Get started with Sentiment Source: https://docs.tryprofound.com/answer-engine-insights/sentiment/getting-started Verify your Sentiment setup and start using the data Profound automatically classifies eligible prompts for Sentiment analysis. Follow these steps to verify your setup and start using the data. ## Step 1: Set the date range and establish a baseline Go to [**Answer Engine Insights**](/answer-engine-insights/about) and select the **Sentiment** tab in the top navigation. Use the date range filter to select your monitoring window. The **Prev. Period** dropdown controls your comparison baseline. ![Sentiment Summary with the date range and comparison period selectors highlighted](https://mintcdn.com/profound-37face47/V1WOgGibXMwY4fKe/images/answer-engine-insights/sentiment/getting-started-1.png?fit=max\&auto=format\&n=V1WOgGibXMwY4fKe\&q=85\&s=671fbaa994f3bc4e1129985f928dd9c8) Before optimizing, note your current positive sentiment percentage and your top positive and negative themes. Use the available filters (Topics, Platforms, Tags, and so on) to slice the data and identify where sentiment varies most across your setup. ## Step 2: Investigate and diagnose Use the drill-down flow to investigate: start from your overall sentiment score, navigate into the themes driving it, then into the attributes within each theme, then into the specific claims behind those attributes included in the content of the cited pages. When investigating a theme, open the cited pages to see the exact content Profound surfaced and determine whether a content fix or a product change is the right response. [Sentiment drilldown view](https://player.mux.com/ZSBfaaKfMdjfbR2TSsF31Rf01t8YndQmFnBW31mvlNZE?metadata-video-title=Sentiment+drilldown+view\&video-title=Sentiment+drilldown+view\&autoplay=muted) ## General diagnosis advice * Negative themes with rising mention counts: **investigate first** * Positive themes with rising counts: **note and reinforce** * Themes trending down: **identify what changed** * A single negative mention with no broader trend: likely noise, **do not act on it** ## Step 3: Take action to improve your sentiment score Review the **Negative Sentiment Drivers** table. It lists the most frequently cited web pages that include top negative claims about your brand. Take action directly from the table: select **Draft Outreach** in the **Suggested Action** column for a citation source and have [AI Marketer](/aim/about) build an [Agent](/agents/about) to draft outreach for that source. # Answer Engine Insights settings Source: https://docs.tryprofound.com/answer-engine-insights/settings Configure competitors, citation categories, name matching, and entity parsing in AEI Settings in Answer Engine Insights (AEI) is your control center for defining how Profound processes, classifies, and analyzes AI engine responses to generate insights. Think of it as a translation layer: it maps the raw text AI engines produce to the clean objects you see across your dashboards. Open settings from the top-right corner of AEI view, next to **Export answers.** > [!NOTE] > > AEI settings are specific to visualizations and data generation. To open organization and account settings, select your organization name at the top left of the platform, then select **Settings**. ## Prompts To open the Prompt Designer, go to **Answer Engine Insights** > **Prompts** > **Modify prompts**. From there, select the prompts you want to tag or modify. Learn more in [Create, manage and tag prompts](/answer-engine-insights/prompt-designer). ## Configure Competitors > [!NOTE] > > If this section is blank in your AEI settings, that's expected. Configure Competitors isn't a setup tool, it's a filter for edge cases. During onboarding, your Profound team configures your primary competitive set. **Configure Competitors** exists for the exceptional cases where you need to manually filter which brands appear in your AEI analysis. It has two modes: **Whitelist** (include) and **Blacklist** (exclude). | **Mode** | **What it does** | **When to use** | | - | - | - | | Blacklist | Removes specific brands from all AEI analysis | Rarely, and only for genuinely irrelevant or restricted brands | | Whitelist | Shows only listed brands in the AEI analysis | Not recommended: distorts and narrows data | ### When to blacklist Use **Blacklist** to remove a brand from your results entirely. Apply it when a brand appears in your analysis but isn't a relevant competitor, or is a competitor you aren't permitted to mention. Common examples: * Large platform companies (Google, Amazon, Apple) appearing in a niche competitive set * Brands from adjacent industries that aren't true competitors * Affiliate companies you don't want in your competitive benchmarking To exclude a brand, switch to **Blacklist** mode, select **+ Blacklist Competitors**, and type the brand name into the list. ![Configure Competitors section with Blacklist Competitors button and Whitelist/Blacklist toggle highlighted](https://mintcdn.com/profound-37face47/V1WOgGibXMwY4fKe/images/answer-engine-insights/settings-1.png?fit=max\&auto=format\&n=V1WOgGibXMwY4fKe\&q=85\&s=511b46f8f3a73172792c47d30ca93b5a) ### When to whitelist > [!WARNING] > > Whitelisting can artificially inflate your visibility score, so we don't recommend using it. In **Whitelist** mode, Profound only shows results from AI responses where one of the brands on your list appears. Profound excludes any response that mentions none of your listed brands from calculations entirely. That creates a narrow, less realistic view of your competitive landscape. If relevant competitors aren't showing up in your results, refine your prompts instead so they reflect your broader industry and both direct and indirect competitors. ## Citation Categories Citation Categories classify the sources AI engines cite when generating responses. Knowing where your citations come from, and controlling how they're grouped, is one of the most useful ways to work with citation data in Profound. ### Default categories Profound assigns every cited domain to one of the default categories. Learn more in [Interpret Answer Engine Insights](/answer-engine-insights/interpret#citation-categories). ### Custom categories Custom categories track any grouping that matters to your strategy: partner sites, PR placements, online travel agency sites, comparison engines, or anything else. Custom categories are useful when you want to: * **Define indirect competitors:** bulk-paste the 10–20 competitors outside your primary competitive set into a custom category so they're pulled out of Other * **Run content experiments:** categorize a set of URLs or a single subpath you've optimized, then measure the before and after citation share for that content * **Apply earned media tiers:** separate top-tier placements from general earned media for more granular analysis > [!TIP] > > The **Other** category catches everything that doesn't fit the default categories, so it grows large and vague over time. Use custom categories to split it for clearer citation analysis. ### Create or edit a category You define the **Owned**, **Competition**, and custom categories during initial setup with your account team. Profound assigns the rest automatically. Override or delete those assignments at any time with the **+ Add Citation Category** option. ![Citation Categories table with Add Citation Category button highlighted](https://mintcdn.com/profound-37face47/V1WOgGibXMwY4fKe/images/answer-engine-insights/settings-2.png?fit=max\&auto=format\&n=V1WOgGibXMwY4fKe\&q=85\&s=5723817f1f16d65b3ebc5973f7c8c1e8) Create custom categories in the same **+ Add Citation Category** dialog. In the **Citation Category** dropdown, type the category name in the filter field, then select **+ Add new category** to save it. ![Add Citation Category dialog with Add new category option highlighted](https://mintcdn.com/profound-37face47/V1WOgGibXMwY4fKe/images/answer-engine-insights/settings-3.png?fit=max\&auto=format\&n=V1WOgGibXMwY4fKe\&q=85\&s=cce03971f6d7fff1d15a2aff4b802c88) Category assignment works at the domain and subpath level. Enable **Include Subpaths** to capture every page under a domain, so tagging `tryprofound.com` also covers `tryprofound.com/blog` and `tryprofound.com/resources`. Or disable it and paste a specific path, such as `yoursite.com/blog`, to categorize that section on its own. ## Name Matching Name Matching connects the different names that answer engine responses use for your brand and your competitors' brands. For example, Profound may appear as "Try Profound," "Profound Metrics," or "Profound Search." Name Matching groups all variations under the same asset. Without it, each variation counts as a separate entity, which makes your visibility look lower than it is. ### How it works Profound combines string matching, fuzzy matching, and an LLM review step to group similar phrases under a single asset. Profound surfaces candidates automatically, and you decide which mappings to accept. Name Matching has three views: * **Mapped** — Every asset with its currently mapped mentions, plus a total mention count. Child assets nest under their parent. * **Unmapped** — Brand mentions Profound detected but hasn't matched to an asset yet, with the date first seen and a mention count. * **Suggestions** — Automatic suggestions for mapping mentions to assets, based on text similarity. ![Name Matching page with Mapped, Unmapped, and Suggestions tabs highlighted](https://mintcdn.com/profound-37face47/V1WOgGibXMwY4fKe/images/answer-engine-insights/settings-4.png?fit=max\&auto=format\&n=V1WOgGibXMwY4fKe\&q=85\&s=e195f114b7271c1e9081f073dec1f43d) Profound aggregates responses and identifies unmapped listings automatically. Map these values to an existing asset, or create a new asset for future values. ### Manage existing mappings To manage or add mapped mentions, select **Edit Mentions** in the asset's action menu. ![Name Matching row menu with Edit Mentions option highlighted](https://mintcdn.com/profound-37face47/V1WOgGibXMwY4fKe/images/answer-engine-insights/settings-5.png?fit=max\&auto=format\&n=V1WOgGibXMwY4fKe\&q=85\&s=c24e3686d8acfe31ba357103a24946f5) To create a new mention, type it into the search bar and select **Add "..."**. ![Edit Mentions dialog with search field and Add mention option highlighted](https://mintcdn.com/profound-37face47/V1WOgGibXMwY4fKe/images/answer-engine-insights/settings-6.png?fit=max\&auto=format\&n=V1WOgGibXMwY4fKe\&q=85\&s=f4902327c20890a6cd5d049838ee2f57) ### Group sub-brands under a parent brand Sub-brands and product lines appear as child assets nested under their parent in the **Mapped** view. To change a relationship, open the row's action menu: * **Merge** combines two assets of the same type. You can't merge owned and competitor assets. * **Unlink from parent** promotes a child asset back to the top level. > [!TIP] > > When a sub-brand and parent brand are closely related, for example "L'Oréal" and "L'Oréal Hair," Profound can't always tell them apart. Keep the mentions mapped to each asset as mutually exclusive as possible. ### Create new mappings To map assets surfaced in the **Unmapped** tab, select the mentions, then select **+ Map Mentions**. To create mappings from the **Suggestions** tab, select the mentions, then select **+ Add Mapping** to accept the suggestion and keep any current mappings. Select **Remap** to accept the suggestion and remove all existing mappings. Use the **Export** and **Upload Mappings** controls to export your mappings as a CSV file or upload mappings in bulk. ![Name Matching page with Export and Upload Mappings buttons highlighted](https://mintcdn.com/profound-37face47/V1WOgGibXMwY4fKe/images/answer-engine-insights/settings-7.png?fit=max\&auto=format\&n=V1WOgGibXMwY4fKe\&q=85\&s=d000f55c6051fa34f91eb457d2b4a9a4) ## Entity Parser Configuration > [!NOTE] > > Your Profound team configures the Entity Parser during onboarding, so most customers don't need to change these settings. Entity Parser Configuration sets which entities Profound extracts from answer engine responses, and lets you add rules for edge cases. ### What it does Entity Parser configuration has two settings: * **Entities to Parse** — The entity type to focus on during parsing. Options include Companies, Products, People, Product Features, and Publication Sources. * **Additional Instructions** — Free-text guidance for the extraction model, up to 500 characters. Use it for context-specific parsing rules. ### When it's needed Entity Parser configuration becomes relevant when: * Your brand name is also a common word or phrase, such as "Popsicle," "Comply," or "Good Hands." * You need to extract product names or people, such as CEOs or celebrities, alongside company names. * Default extraction consistently over- or under-counts mentions in a way Name Matching alone doesn't fix. If your entity extraction behaves unexpectedly, contact your Profound team rather than changing these settings yourself. ## FAQ ### How often should I review Name Matching? Check the **Unmapped** and **Suggestions** views at least once during your first two weeks on the platform, then periodically after major events: new product launches, rebrands, or an unexpected change in your visibility score. ### I pasted a list of domains into the wrong citation category. Can I fix it in bulk? No. Each **Add Citation Category** batch applies one category to every URL in it, so check your category selection before you save a large paste. To correct existing rows, delete them individually with the trash icon and re-add them under the right category. ### The Configure Competitors section is blank. Did I set something up wrong? No, blank is the correct default state. Your Profound team configures your competitive set, not this section. ### Does Name Matching apply to Shopping? Yes, Name Matching works across both AEI and Shopping. Learn more about Shopping in [About Shopping](/shopping/about). # About Dashboards Source: https://docs.tryprofound.com/custom-dashboards/about Turn your Profound data into live, shareable dashboards > [!NOTE] > > **Available on:** all plans > > **Find it in:** Analytics > Dashboards Custom Dashboards let you build configurable views of your Profound data and return to them any time, set up as you left them. Pick the charts that matter to you, apply filters, arrange the layout, and your reporting is ready whenever you or your stakeholders need it. ![Custom dashboard with four charts for Visibility Score, Citation Share, and Sentiment with Compare categories toggles](https://mintcdn.com/profound-37face47/V1WOgGibXMwY4fKe/images/custom-dashboards/about-1.png?fit=max\&auto=format\&n=V1WOgGibXMwY4fKe\&q=85\&s=09ec58d580cd2efb22a777fd2a8381f4) ## Key features ### Configurable visualizations Choose from Profound metrics such as Visibility Score, Share of Voice, and Citation Share, with more available across Sentiment, FactCheck, Shopping, and Agent Analytics. Display each visualization as a chart or a table, and add as many as you need. ### Persistent filters Narrow each visualization with filters such as Topics, Regions, and Competitors, with additional filters available for specific metrics. Filters are saved with each visualization, so the dashboard opens with them applied in your next session. ### Sharing and privacy Every dashboard starts private, visible only to people you invite. Invite specific people by email, open access to everyone in your organization, or set access to anyone with the link and share it with stakeholders outside Profound. People in your organization who open a shared dashboard can change the date range for their own session, export it as a PDF, and duplicate it. Only the owner can edit visualizations or rename, share, or delete the dashboard. Link viewers outside Profound see a read-only dashboard fixed to the date range the owner saved. ### PDF export Export any dashboard as a PDF directly from Profound. One click produces a clean document you can attach to an email or drop into a monthly report. # Custom Dashboards FAQ Source: https://docs.tryprofound.com/custom-dashboards/faq Frequently asked questions about Custom Dashboards > **Can I share a dashboard with someone who doesn't have a Profound account?** > > Yes. Open your dashboard, select **Share** and set **General access** to **Anyone with the link**. Copy the link and share it with anyone to give them a view-only access to the dashboard. > **Can I export the raw data behind a dashboard?** > > No, dashboards currently export only as PDF. To work with the underlying raw numbers, pull them with the [Profound API](/rest-api/introduction), or build a [Workflow](/agents/workflows/about-workflows) that uses the matching data node (for example, [Visibility Score](/agents/workflows/nodes/data/visibility-score) or [Citation Pages](/agents/workflows/nodes/data/citation-pages)) with the same filters as your chart. To give external AI tools access to your Profound data, connect them to [Profound's hosted MCP server](/mcp/overview). > **Can a dashboard be emailed on a recurring schedule?** > > Not from Dashboards directly. To send a recurring report by email, build an [Agent](/agents/about) that generates the report and emails it on a schedule. > **Someone shared a dashboard with me and I want to build on it. How can I edit it?** > > Only the dashboard owner can edit a dashboard. To build on someone else's dashboard, open the dashboard actions menu and select **Duplicate**, then edit your copy. > **Which competitors appear in my charts?** > > For each chart, you choose which of the competitors tracked in your category to compare. Save that competitor comparison as the chart's default view to keep it. > **Is there a limit on how many dashboards I can create?** > > No. Create as many dashboards as you need, and each one keeps its own charts, filters, and layout. # Get started with Custom Dashboards Source: https://docs.tryprofound.com/custom-dashboards/getting-started Create your first dashboard and add widgets > [!TIP] > > Dashboards read from your Profound categories, so set up your topics and prompts first. Learn more in [How to create topics and prompts to track in Profound](/answer-engine-insights/how-tos/create-topics-and-prompts). ## Setup steps ### Step 1: Create a dashboard In Profound, go to **Dashboards** in the left navigation bar under **Analytics**. When you create a new dashboard, Profound opens an Aim-first creation flow. Describe in the AI Marketer chat what you want to report on, and AI Marketer builds the dashboard and adds the visualizations for you. AI Marketer can query metrics across more than 25 categories, which helps when you need one dashboard that covers many categories. You can still choose the manual route. To create the dashboard manually: 1. Select **+ Create new**. 2. Give the dashboard a clear name so stakeholders know what it shows, and add an optional description. ### Step 2: Add visualizations 1. Select **+ Add visualization** and pick the metric, such as **Visibility Score** or **Citation Share**, from the **Visualization** dropdown. 2. Toggle between **Chart** and **Table** to choose how the visualization displays. A dashboard isn't limited to one category. Each visualization can read from its own category, so one dashboard can show different metrics for different categories, and a visualization can show a metric rolled up across several categories. ### Step 3: Apply filters and save Narrow the visualization with filters such as **Topics**, **Regions**, or **Competitors**, then select **Save changes**. Repeat for each visualization you want on your dashboard. When you’re ready to save your dashboard, select **Save view** on the top right of the screen. Your dashboard will appear on the **Dashboards** page. ### Step 4: Set the date range and arrange the layout Open the dashboard and use the filters at the top of the screen to set the date range and the time period it compares against. Your selection saves automatically and becomes the default everyone sees. To rearrange the layout, select **Edit view**, drag and drop your charts, and select **Save changes** when done. ### Step 5: Share or export Select **Share** to invite specific people to view the dashboard, open access to your entire organization, or allow anyone with the link to view. Select **Export as PDF** when you need a document instead of a live view. ## Tips and best practices * **Build one dashboard per audience.** A regional lead, an executive, and a content team each read different metrics, and separate dashboards keep each view focused. * **Name dashboards by audience and purpose.** A clear name like "Hotels: brand visibility" prevents confusion as your dashboard list grows, and the optional description can record who the dashboard is for. * **Use prompt tags to track a specific set of prompts.** For example, tag the prompts your new content targets, then filter the dashboard by that tag to track visibility for just those prompts. * **Set the date range before sharing a link.** Link viewers see the range you set, so pick the window your stakeholders should look at. * **Use AI Marketer to build faster.** Describe the report you need in plain language, and AI Marketer creates the dashboard and adds the visualizations for you. Open an existing dashboard in an AI Marketer chat to ask questions about the data or add and rearrange charts. # Cloudflare setup Source: https://docs.tryprofound.com/dynamic-bot-rendering/cloudflare Route AI assistant traffic to Profound Dynamic Bot Rendering with a single Cloudflare Worker, keeping human and search-crawler traffic on your origin. This guide adds one Cloudflare Worker to your zone. The Worker inspects the `User-Agent`, forwards matching AI assistant requests to Profound, and passes everything else straight through to your origin. The Worker calls Profound's general endpoint, `GET https://concierge.tryprofound.com/v1/concierge`, and supplies the original host and path as headers. > [!WARNING] > > A Worker on a `/*` route runs on every request to that hostname, so it sits in your production request path. The code retries your origin for fetch failures, a response-header deadline, and statuses `400`, `401`, `403`, `500`, `502`, `503`, and `504`. It passes other statuses through, including redirects, `404`, and `429`. Adapt the public-page allowlist and latency budget, then test on a staging hostname first. A failure after response streaming starts cannot transparently replace a partially sent body. ## Prerequisites * A Cloudflare account with Workers enabled on the zone * An existing proxied DNS record for the hostname and an origin reachable through it. Use a [Worker Route](https://developers.cloudflare.com/workers/configuration/routing/routes/), not a Worker Custom Domain. * An inventory of existing and overlapping Worker routes. Preserve their logic rather than replacing them. If composing them requires a design change, stop and review that separately. * A recorded route failure mode and capacity check against [Workers limits](https://developers.cloudflare.com/workers/platform/limits/). Use fail-open for quota exhaustion only where bypassing the Worker preserves existing security. Fail-closed can affect human traffic too, before the JavaScript catch runs. * Permission to add Worker routes for the hostname * Your Dynamic Bot Rendering API key, a registered domain, serving policy, and a known published test page. See [Before you start](/dynamic-bot-rendering/overview#before-you-start). ## Setup **1. Create the Worker** In the Cloudflare dashboard, open **Workers & Pages → Create → Create Worker**. Name it `profound-bot-rendering` and deploy the placeholder so the Worker exists. **2. Add the Worker code** For the new Worker, open **Edit code** and add the following. Replace the four example paths with reviewed public pages. Do not overwrite existing Worker logic. ```js theme={null} const CONCIERGE_ENDPOINT = 'https://concierge.tryprofound.com/v1/concierge'; // Keep this list in sync with the supported assistants in the Profound docs. const BOT_RE = /duckassistbot|chatgpt-user|gemini-deep-research|perplexity-user|amzn-user|mistralai-user|claude-user|claude-code|codex/i; // Explicit public pages only. Review each path before extending this list. const PUBLIC_PATHS = new Set(['/', '/pricing', '/docs', '/docs/getting-started']); const UPSTREAM_TIMEOUT_MS = 2000; // Example header deadline; leave time for origin fallback. const FORWARDED_HEADERS = ['user-agent', 'accept', 'accept-encoding', 'accept-language']; // Statuses that mean "Profound could not serve this" rather than "the origin // said so". 404 is deliberately absent: Profound fails open internally and // returns your origin's own status, so a 404 is your real 404. const FAILOVER_STATUSES = new Set([400, 401, 403, 500, 502, 503, 504]); async function failOpen(request) { // A subrequest to the same zone goes to the origin without re-running this Worker. const originResponse = await fetch(request); const response = new Response(originResponse.body, originResponse); response.headers.set('x-concierge-cdn-failover', '1'); return response; } export default { async fetch(request, env) { const url = new URL(request.url); const userAgent = request.headers.get('user-agent') || ''; // Loop protection: Profound stamps this on its own origin fetches. // Passing it through means those fetches reach the origin directly. if (request.headers.has('x-concierge-request')) return fetch(request); if (request.method !== 'GET') return fetch(request); if (request.headers.has('cookie') || request.headers.has('authorization')) return fetch(request); const isAssistant = BOT_RE.test(userAgent); if (!isAssistant || !PUBLIC_PATHS.has(url.pathname)) return fetch(request); // Copy only required negotiation headers, never viewer credentials or identity. const headers = new Headers(); for (const name of FORWARDED_HEADERS) { const value = request.headers.get(name); if (value !== null) headers.set(name, value); } headers.set('x-concierge-api-key', env.PROFOUND_CONCIERGE_KEY); headers.set('x-concierge-host', url.hostname); headers.set('x-concierge-url', url.pathname + url.search); const controller = new AbortController(); const timeout = setTimeout(() => controller.abort(), UPSTREAM_TIMEOUT_MS); try { const response = await fetch(CONCIERGE_ENDPOINT, { method: 'GET', headers, redirect: 'manual', // pass redirects through instead of following them cache: 'no-store', // also verify the endpoint owner's cache policy signal: controller.signal, }); if (FAILOVER_STATUSES.has(response.status)) { if (response.body) void response.body.cancel().catch(() => {}); controller.abort(); return failOpen(request); } const result = new Response(response.body, response); result.headers.set('cache-control', 'no-store'); return result; } catch { return failOpen(request); } finally { clearTimeout(timeout); } }, }; ``` The example allows 2 seconds for Profound response headers. Choose a bounded value that leaves enough time for your origin response within the assistant's latency budget. The deadline ends when headers arrive; it does not bound response-body streaming. Workers supports [AbortController](https://developers.cloudflare.com/workers/runtime-apis/web-standards/). **3. Store the API key as a secret** Open **Settings → Variables and Secrets**, add a secret named `PROFOUND_CONCIERGE_KEY`, and paste your API key. Save and deploy. Use a secret rather than a plaintext environment variable. Secrets are write-only once saved, so the key stays hidden from the dashboard. To do the same with Wrangler: ```bash theme={null} npx wrangler secret put PROFOUND_CONCIERGE_KEY ``` **4. Attach the Worker to your hostname** Open **Settings → Domains & Routes → Add route**, enter the pattern for your page traffic, and select the zone. ```text theme={null} www.example.com/* ``` If your site serves assets from the same hostname, the Worker still runs on them and returns them with a plain origin fetch. To keep the Worker out of that path entirely, narrow the route pattern instead of relying on the code's path check. **5. Verify** Check routing, then separately verify the known published page and excluded traffic: ```bash theme={null} curl -sD - -o /dev/null https://www.example.com/pricing -A 'chatgpt-user' ``` Check the HTTP status, a valid `x-concierge-request-id`, and `x-concierge-bot-kind: chatgpt-user`. On your published test page, also require `x-concierge-cache: HIT` and the expected HTML body. A normal browser request should stay on your origin route. Test non-`GET`, API, asset, and credential-bearing requests too. Full checks and header meanings are in [Verify and troubleshoot](/dynamic-bot-rendering/verify-and-troubleshoot). ## Caching The Worker's upstream call must never be cached. Every page uses the same upstream URL, `https://concierge.tryprofound.com/v1/concierge`, and the host, path, and query that identify the page travel only in trusted headers. If that URL were cached without those headers in the cache key, different pages or hosts would collide, and adding `User-Agent` to the key would not fix it. The example uses the [`cache: 'no-store'` fetch setting](https://developers.cloudflare.com/workers/runtime-apis/fetch/) and marks returned Profound responses `Cache-Control: no-store`. [Cloudflare evaluates caching on the fetch subrequest URL](https://developers.cloudflare.com/workers/reference/how-the-cache-works/), not the viewer URL, so cache rules on your own zone do not apply to the upstream call. Before rollout, send repeated assistant requests to two published paths and a query variant of each, and confirm every response carries a fresh `x-concierge-request-id`. Also check any other cache layer in front of your site for assistant and human separation, and for what happens to cached entries after you publish a replacement, unpublish, or pause. Do not add a `User-Agent`-only cache key as a workaround. If you need to cache Profound's responses at your edge, contact Profound support first: the cache key has to include the host, path, and query identity and be invalidated on publication changes. ## How the Worker protects your site * **Upstream headers are allowlisted.** For routed requests, the Worker copies only `User-Agent`, `Accept`, `Accept-Encoding`, and `Accept-Language`, then sets the trusted key, host, and path. It does not copy client-supplied `x-concierge-*` identity or credentials. Requests carrying cookies or authorization bypass Profound entirely. Ordinary bypass requests retain their headers for your origin. * **Loop protection is not authentication.** The marker is spoofable; never use it to bypass WAF rules or access controls. See the [public-content prerequisites](/dynamic-bot-rendering/overview#before-you-start). * **Loop protection is two-sided.** Profound stamps `x-concierge-request` on its own origin fetches, and the Worker passes those straight through. Profound also rejects any inbound request carrying that header, so even a misconfigured rule breaks a single request instead of looping. * **The key never reaches the browser.** It lives in a Worker secret and is only attached on the upstream call. * **Redirects are passed through.** `redirect: 'manual'` returns a redirect to the assistant instead of following it, so redirect handling stays your origin's decision. # Amazon CloudFront setup Source: https://docs.tryprofound.com/dynamic-bot-rendering/cloudfront Route AI assistant traffic to Profound Dynamic Bot Rendering with a single CloudFront Function and an origin group, without Lambda@Edge. This guide connects an existing CloudFront distribution to Dynamic Bot Rendering. This setup adds one CloudFront Function on viewer request to select an origin for eligible AI assistant page requests. This setup uses no Lambda\@Edge. Two properties support this integration: * With viewer `Host` forwarding disabled, CloudFront uses the custom origin domain for its `Host` header and TLS Server Name Indication (SNI). Preserve this setting in both policies in step 3. * Profound's CloudFront endpoint returns `cache-control: no-store` itself, so CloudFront never stores a second, staler copy of content Profound already caches. > [!NOTE] > > Requests routed to Profound use the CloudFront endpoint `GET https://concierge.tryprofound.com/v1/concierge/cloudfront/{path}`. You never construct that URL by hand. The origin's **Origin path** setting prepends the prefix, and the request URI passes through untouched. ## Why the design looks like this Two CloudFront rules shape everything below: 1. A viewer-request function can't change which cache behavior a request matches. CloudFront selects the behavior before the function runs, and rewriting the URI doesn't re-match it. Assistant traffic therefore stays in the same behavior as human traffic, rather than a dedicated behavior with its own cache policy. 2. A viewer-request function can switch the origin, including building a per-request origin group with failover (`cf.createRequestOriginGroup`, runtime `cloudfront-js-2.0`). Two consequences follow: * Routing happens by swapping the origin, not the behavior. Because **Origin path** is a per-origin setting, a failover to your default origin automatically uses the original, unprefixed path. No path rewriting is needed. * Assistant and human requests share the behavior's cache policy, so the cache key must be split with a marker header (step 3). Without it, CloudFront can serve a human-cached copy to an assistant, or the reverse. ## Prerequisites * An existing CloudFront distribution * AWS Identity and Access Management (IAM) permissions for CloudFront distributions, functions, and cache policies * Your Dynamic Bot Rendering API key, a registered domain, an effective serving policy, and a known published test page. See [Before you start](/dynamic-bot-rendering/overview#before-you-start). * Public, non-personalized pages only. The example allows `/`, `/pricing`, `/docs`, and `/docs/getting-started`. Replace these with reviewed public pages; do not include APIs, authentication, account, admin, or framework-resource paths. * Record existing function associations, origins, and policies for rollback. Preserve existing security, authentication, and rewrite logic. If combining it requires a routing design change, stop and review that separately. * Confirm that firewall rules, bot challenges, and origin allowlists permit both assistant traffic and Profound's origin/scraper fetches. The loop marker is not an authentication or firewall bypass. ## Setup **1. Create the Profound origin** Open **CloudFront → Distributions → your distribution → Origins → Create origin**. | Setting | Value | | - | - | | Origin domain | `concierge.tryprofound.com` | | Origin path | `/v1/concierge/cloudfront` | | Name | `Profound_Origin` | | Protocol | HTTPS only | Add two custom origin headers: | Header | Value | | - | - | | `x-concierge-api-key` | Your Dynamic Bot Rendering API key | | `x-concierge-host` | Your public site host, for example `www.example.com` | CloudFront overwrites any viewer-sent header of the same name when forwarding to this origin, so a client can't spoof the API key or the host. The function in step 2 also strips them, for defense in depth. > [!NOTE] > > **Serving more than one hostname from this distribution?** A static `x-concierge-host` only works for a single public host, and static origin headers win over anything the function sets. For a multi-domain distribution, omit that custom header here, uncomment the marked line in the function below, and include `x-concierge-host` in the cache key in step 3 so it is also forwarded. Forwarding alone does not separate cached responses for different hosts. Review host identity for human and fallback responses too before enabling multiple hosts. **2. Create the viewer request function** Open **CloudFront → Functions → Create function**. Name it `profound-bot-rendering` and choose the runtime `cloudfront-js-2.0`. Origin groups require the 2.0 runtime. ```js theme={null} import cf from 'cloudfront'; // Keep this list in sync with the supported assistants in the Profound docs. var BOT_RE = /duckassistbot|chatgpt-user|gemini-deep-research|perplexity-user|amzn-user|mistralai-user|claude-user|claude-code|codex/i; // Replace with reviewed public, non-personalized page paths. var PUBLIC_PATHS = ['/', '/pricing', '/docs', '/docs/getting-started']; var PUBLIC_HOSTS = ['www.example.com']; function handler(event) { var request = event.request; var headers = request.headers; // Never trust these from a client. The API key and host come from the // origin's custom headers; the route marker feeds the cache key, so a // spoofed value could pollute the assistant cache entry. delete headers['x-concierge-api-key']; delete headers['x-concierge-host']; delete headers['x-concierge-url']; delete headers['x-concierge-route']; // Loop protection: Profound stamps x-concierge-request on its own origin // fetches. Never route those back to Profound. if (request.method !== 'GET' || headers['x-concierge-request']) { return request; } // CloudFront exposes cookies separately from request.headers. if (headers.authorization || Object.keys(request.cookies || {}).length > 0) { return request; } var ua = headers['user-agent'] ? headers['user-agent'].value : ''; var isAssistant = BOT_RE.test(ua); var isPublicPage = PUBLIC_PATHS.indexOf(request.uri) !== -1; var host = headers.host ? headers.host.value : ''; if (!isAssistant || !isPublicPage || PUBLIC_HOSTS.indexOf(host) === -1) { return request; } // Split the cache key. This header is in the behavior's cache policy, // so assistant responses never collide with human cache entries. headers['x-concierge-route'] = { value: 'bot' }; // Multi-domain distributions only (see Step 1): derive the host from // the viewer Host header instead of a static origin custom header. // headers['x-concierge-host'] = { value: headers.host.value }; // Try Profound first; fall back to your own origin if Profound is down // or misconfigured. CloudFront accepts 400, 403, 404, 416, 429, 500, // 502, 503 and 504 as failover criteria. 401 is not allowed, so a 401 // from a bad API key surfaces to the assistant instead of failing over. // 404 is deliberately omitted: Profound fails open internally and // returns your origin's own status, so a 404 is your real 404 and // retrying would double-fetch. 429 is also omitted and passes through. cf.createRequestOriginGroup({ originIds: [ { originId: 'Profound_Origin' }, { originId: 'YOUR_DEFAULT_ORIGIN' } ], failoverCriteria: { statusCodes: [400, 403, 500, 502, 503, 504] } }); return request; } ``` Replace `YOUR_DEFAULT_ORIGIN` with your distribution's existing default origin ID and `PUBLIC_HOSTS` with the registered hosts for this origin, then select **Publish**. For the static host header, list only that one host. Keep the exact public-path allowlist aligned with your site's routes. Requests with cookies or authorization keep their existing routing; the function does not send them to Profound. The function routes only `GET`; all other methods return to existing routing. CloudFront origin groups support failover for `GET`, `HEAD`, and `OPTIONS`. The configured `503` criterion enables connection-failure failover; `504` enables response-timeout failover. Before deployment, set and record a bounded primary-origin connection-attempt, connection-timeout, and response-timeout budget that leaves time for the fallback request. CloudFront defaults can spend 30 seconds on connection attempts alone (three attempts of 10 seconds). Test the resulting total latency; do not assume failover is immediate. See [CloudFront origin failover](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/high_availability_origin_failover.html). **3. Update the cache and origin request policies** CloudFront strips any viewer header or query string the behavior's policies don't include. This happens before the origin request, regardless of what the function decided. Three settings are required on the behavior serving your pages. **1. Add `x-concierge-route` to the cache-key headers.** AWS managed cache policies can't be edited. If the behavior uses one, copy every setting into a new custom policy first, then add the header. Keep **Minimum TTL** (time to live) at `0`. In the multi-domain variant, include the trusted `x-concierge-host` in cache identity as well as forwarding it. The bot marker alone does not distinguish hosts. **2. Include the query strings your pages vary on** (or "All") in the cache key. Cache-key query strings also reach the origin. An origin request policy can forward additional query strings without keying them, but responses that vary on those values can then share a cache entry. If neither policy includes a query string, CloudFront strips it. Verify both forwarding and cache identity for each supported variant. **3. Forward the viewer `User-Agent` through the origin request policy.** By default, CloudFront replaces `User-Agent` with `Amazon CloudFront` on origin requests. Profound would then classify every routed request as an unknown agent and permanently fail open, with no renders served and none scheduled. Use a custom header allowlist for `User-Agent` and, when required, `Accept` and `Accept-Language` (plus `x-concierge-host` in the multi-domain case). Preserve required compression settings. Do not use **AllViewer**: viewer `Host` forwarding can override the service hostname and break origin routing or TLS. Exclude viewer `Host`, `Cookie`, and `Authorization` from both the cache and origin request policies; cache-key values are forwarded too. These policies apply to human traffic as well. If the existing behavior needs these headers or cookies, stop and review compatibility before changing it. CloudFront documents per-origin `originOverrides` for `hostHeader` and `sni` in [request origin groups](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/helper-functions-origin-modification.html); a customer origin requiring a different host needs that compatibility reviewed separately. This example does not choose or add an override. Profound's origin fetches do not forward viewer credentials, and published pages are not per-session or per-language variants. > [!WARNING] > > For this setup, add `User-Agent` to the origin request policy rather than the cache key. An origin request policy applies to the whole behavior, so CloudFront now forwards the viewer `User-Agent` on human requests too. If your origin varies its HTML by `User-Agent` (separate mobile and desktop markup, for example) without corresponding cache-key variation, CloudFront can serve one cached variant to other viewers. Confirm that the existing cache key already accounts for your origin's variants. Locale, geography, and other header-dependent content also need review. If this requires a cache design change, stop before deployment. Raw `User-Agent` keying can substantially reduce cache reuse. **4. Associate the function with the behavior** Open **Behaviors → your page behavior → Edit**. Set the cache policy from step 3, then under **Function associations** set **Viewer request** to your `profound-bot-rendering` CloudFront Function. For a behavior without existing edge logic, no origin request or origin response association is needed. Do not remove existing associations. Merge and preserve existing viewer-request logic before associating this function; stop if that requires a design decision. Save and wait for the distribution to finish deploying. **5. Verify** ```bash theme={null} curl -sD - -o /dev/null https://www.example.com/pricing -A 'chatgpt-user' ``` Check the HTTP status, a valid `x-concierge-request-id`, and the expected `x-concierge-bot-kind`. On your known published page, also require `x-concierge-cache: HIT` and the expected rendered body. Test normal browser traffic, non-GET methods, excluded paths, and credential-bearing requests against their existing behavior. Test CDN-level failover only in staging or an isolated distribution. Record the original origin settings, configure an unreachable test origin, and repeat an uncached assistant request. Expect the default-origin response after the configured timeout, with no `x-concierge-request-id`. Restore the original settings and wait for propagation. A `401` does not trigger failover; the configured `400` and `403` statuses do, which can mask configuration errors. Cached fallback responses can persist until their TTL expires. Full checks and header meanings are in [Verify and troubleshoot](/dynamic-bot-rendering/verify-and-troubleshoot). ## How the cache split behaves * Human requests never carry the marker, because the function strips any client-supplied copy. The marker separates their entries from assistant entries, but query and header policy changes can affect human cache hit rates. * Eligible assistant requests carry `x-concierge-route: bot` and get their own entries. * Profound's responses set `cache-control: no-store`, so with Minimum TTL at `0` the assistant-keyed entries are only ever populated by failover responses from your own origin: correct content, expiring on your origin's own TTL. > **Known gap: failover responses can linger after recovery** > > During a full Profound outage, failed-over origin responses can sit in the assistant-keyed cache until their TTL expires, delaying the return to rendered content after recovery. > > Validate that this recovery delay is acceptable for your existing TTLs. Changing how fallback responses are cached requires a separate design review; this guide does not add an edge function to change that behavior. ## Rolling back Restore the recorded viewer-request association and any policies changed for this setup. Use **No association** only if there was no previous function. Allow the configuration to propagate, then verify the original routing and cache behavior. Previously cached fallback responses can remain until their TTL expires or they are invalidated through your normal process. # Dynamic Bot Rendering Source: https://docs.tryprofound.com/dynamic-bot-rendering/overview Serve AI assistants a fully rendered version of your pages from the edge, while other traffic stays on your existing route. Many AI assistants fetch your pages with a plain HTTP request and no JavaScript engine. On a client-rendered site, they may see an empty shell instead of your content. Dynamic Bot Rendering fixes this at your content delivery network (CDN). You add one small routing rule to the CDN you already run. That rule recognizes AI assistant traffic by `User-Agent` and forwards it to Profound. For the public pages you have opted in, Profound returns a published, pre-rendered copy of the page when one exists. For everything else it passes your origin's live response straight through. Human visitors, search crawlers, API calls, and assets never leave your existing route. > [!NOTE] > > Dynamic Bot Rendering is served by Profound's Concierge service, so its request and response headers use the prefix `x-concierge-`. ## How a request flows **1. Your CDN classifies the request** Your routing rule matches the `User-Agent` against the [supported assistant list](#supported-ai-assistants). Only matching requests go to Profound. The Cloudflare and CloudFront examples also restrict routing to a path allowlist; the Vercel rule forwards all assistant traffic and lets your Profound policy decide. **2. Your CDN forwards the request to Profound** The rule attaches your API key, your public host, and the original path and query as trusted headers. It sets those values from its own configuration and the parsed request, never from headers a client sent. Profound ignores client-supplied `x-concierge-*` identity headers. **3. Profound serves a published render, or falls back to your origin** Profound checks the API key, confirms the host is registered to your organization, and resolves the [policy](#how-rendering-and-serving-are-controlled) for the path. If the path has a published render and policy allows serving, Profound returns that render. Otherwise it fetches the page from your origin and returns the live response unchanged. Depending on policy, that miss can also schedule a background render of the page as a new candidate. **4. The assistant receives your page** A published render is fully rendered HTML: the same page a browser produces after JavaScript runs. Rendering makes your content readable to the assistant. It does not guarantee inclusion or citation in an answer. ## Supported AI assistants Profound identifies the assistant from the original `User-Agent` on every request, using the same tokens your CDN rule matches on. Matching is a case-insensitive substring test. | Token | Assistant | | - | - | | `chatgpt-user` | ChatGPT browsing | | `codex` | OpenAI Codex | | `claude-user` | Claude | | `claude-code` | Claude Code | | `perplexity-user` | Perplexity | | `gemini-deep-research` | Gemini Deep Research | | `duckassistbot` | DuckDuckGo DuckAssist | | `amzn-user` | Amazon | | `mistralai-user` | Mistral | > [!WARNING] > > Keep your CDN rule's list in sync with this table. Profound classifies traffic independently, so a `User-Agent` your rule forwards but Profound doesn't recognize is treated as an unknown agent. It fails open to your origin and adds a round trip without serving or scheduling a render. ## Search crawler routing Ordinary Googlebot and Bingbot requests fall outside the list above and stay on your existing route. Test your site's cache and edge rules to confirm this before rollout. Dynamic Bot Rendering doesn't cloak: the rendered page is the same page a browser produces after JavaScript runs. ## How rendering and serving are controlled Two independent settings decide what an assistant gets for a given URL: * **Policy** answers "may Profound serve stored content for this path, and to which assistants?" * **Publication** answers "which exact render is live for this path?" Both have to line up before a stored render is served. A published page under an `off` policy serves nothing. A `serve` policy on a path with no publication falls back to your origin. You manage both yourself in the Profound dashboard. ### Policy modes | Mode | What the assistant receives | Renders new candidates in the background? | | - | - | - | | `off` | Your origin's live response | No | | `warm` | Your origin's live response, even if a publication exists | Yes, when the request is eligible | | `serve` | The published render when one is usable, otherwise your origin | Yes, on a miss when the request is eligible | `off` is the default for any path no rule covers. A newly registered domain does nothing until a rule opts a path in, so onboarding is inert until you decide what to render. Use `warm` to build up candidates for review before you start serving. `serve` never publishes anything by itself; it only permits an existing publication to be delivered. ### Rules and precedence Every rule belongs to one registered domain. A **domain default** sets the baseline for the whole host, and **page rules** override it for specific paths. A page rule matches an exact path (optionally pinned to a query string), a path prefix, or a glob such as `/blog/*`. Prefix and glob rules match on the path without its query string. For each request Profound picks one winning rule: 1. An exact rule for the path and query string. 2. Otherwise, an exact rule for the path. 3. Otherwise, the best matching prefix or glob rule. Higher priority wins, then the more specific pattern. 4. Otherwise, the domain default. 5. With no rule at all, the effective mode is `off`. Only the winning rule applies. Any setting it leaves unset is inherited from the domain default, never from a broader page rule that also matched. For example, with a domain default of `serve`, a `/docs/*` rule set to `warm`, and an exact `/docs/start` rule that only changes its allowed assistants, `/docs/start` resolves to `serve`. The `/docs/*` rule does not contribute. A rule can also be deactivated. An inactive rule is skipped entirely, so the domain default or another matching rule takes over for that path. Deactivating an `off` rule that excluded a path can therefore turn serving back on. To keep a path on your origin, use an active rule with mode `off`. ### Per-rule settings Each rule can set any of these and inherit the rest: * **Mode.** `off`, `warm`, or `serve`, as above. * **Allowed assistants.** Restrict which supported assistants receive treatment on the matched paths. Unset inherits the domain's list, and when nothing sets a list every supported assistant is eligible. A list replaces the inherited list rather than intersecting with it, and an empty list excludes every assistant. An excluded assistant receives your origin's response with an effective policy of `off`. The published render itself is shared: you cannot publish different versions for different assistants. * **Automatic rendering.** Allow or block background candidate renders independently of mode. `serve` with automatic rendering off serves only what you publish by hand. `off` never renders automatically, whatever this setting says. ### Pausing a domain Pausing a domain sends every assistant request for that host to your origin while keeping the registration, rules, renders, and publications intact. Resuming restores the saved behavior. Use pause when you want to stop serving quickly without touching your CDN or your rules. While paused, you can still render, review, and publish pages. ## From render to live page Every render starts as a **candidate**: a stored snapshot of one URL, made either in the background by an eligible request or on demand. A URL can accumulate several candidates. None of them is served until you publish one. **1. Review** A candidate that differs sharply from the page currently published for that URL is held as **pending**. That happens when its visible text collapses to a fraction of the live page's, or when both the title and the first heading change. Preview the candidate, then approve or reject it. Approval marks it eligible for publication and nothing more. When a URL has no published page yet, there is nothing to diverge from and the candidate is stored as approved. **2. Publish** Publishing selects one exact render as the live page for that URL. Publishing a pending candidate approves it in the same step. A rejected candidate cannot be published. **3. Roll back, unpublish, or replace** Rolling back is publishing an earlier render for the same URL. Unpublishing removes the live page so assistants return to your origin, and keeps the render history. Rejecting a page that is currently published also unpublishes it. To refresh content, render a new candidate, review it, and publish it. A published render stays live until you publish a replacement or unpublish it. Profound never replaces a publication automatically, and a render does not stop serving because it has aged. If a stored render can no longer be read, Profound falls back to your origin for that request rather than serving a different render. Page identity is the public host plus the exact path and query string. Publishing `/pricing` does not publish `/pricing?plan=pro`, and each variant is rendered, reviewed, and published on its own. ## Fail-open by design Fail-open happens at two layers, and neither covers every failure on its own. > **CDN-level failover** > > The Cloudflare Worker retries your origin for fetch failures, a response-header deadline, and a configured list of statuses. CloudFront uses an origin group with configured failure criteria and timeouts. Vercel's routing rule has no CDN-level failover. > **Service-level fail-open** > > Once a request is authenticated and valid, Profound fetches your origin whenever it cannot serve a stored render: no publication, policy set to `off` or `warm`, an unknown assistant, an unreadable render, or an internal lookup failure. Your origin must still be reachable. > [!WARNING] > > On Vercel, a Profound outage or a hard rejection can reach the assistant as an error, because the external rewrite has no secondary origin to retry. Cloudflare and CloudFront customers get an extra layer of protection from their CDN failover. A bad API key, an unregistered host, or a malformed path is rejected by Profound rather than proxied, so a misconfigured rule cannot leak requests to your origin under Profound's name. Cloudflare and CloudFront can mask some of these rejections through their CDN failover, which means a working page in a browser does not prove the integration is correct. Inspect the `x-concierge-*` response headers, as described in [Verify and troubleshoot](/dynamic-bot-rendering/verify-and-troubleshoot). ## Scope and limits * **`GET` only.** Other methods, including `HEAD`, are not part of the contract. Use `curl -sD - -o /dev/null`, not `curl -I`, when testing. * **Public, non-personalized pages only.** Opt in only reviewed public pages, whether through your policy rules in Profound or through a path allowlist in your CDN rule. An extensionless path is not proof of a page: keep APIs, GraphQL, authentication, administration, framework resources, and session-sensitive routes out. The Cloudflare and CloudFront examples allow only `/`, `/pricing`, `/docs`, and `/docs/getting-started`; replace these with your own paths. * **Query strings are part of the page identity.** `/products?id=a` and `/products?id=b` are distinct pages, stored and rendered separately. * **One host per rule.** The public host your rule sends must match a domain registered in Profound. Serve several hosts with one rule per host. * **No credentials reach your origin through Profound.** Profound does not forward viewer cookies or authorization headers when it fetches your origin, and the example rules keep credential-bearing requests on your existing route. Protected pages may render as a login page or public content, which is a compatibility boundary rather than a leak. * **One render per URL, not per visitor.** A stored render is not varied by session, language, geography, or other request headers. If the same URL serves different content by those signals, preview the render and confirm that one version is acceptable for every assistant before adding it to your allowlist. ## Before you start Complete these steps in the Profound dashboard before configuring your CDN. The Dynamic Bot Rendering endpoint your CDN will call is `https://concierge.tryprofound.com`. Also record your existing CDN routes, functions, cache policies, and rollback settings before you change anything, and check that web application firewall (WAF) rules, bot challenges, deployment protection, and origin allowlists let both assistant requests and Profound's origin fetches through. If your origin needs a way to identify Profound's fetches, contact Profound support. **1. Register your domain** Open **Dynamic Bot Rendering** in the Profound dashboard and add the exact public host you serve, such as `www.example.com`. The host must resolve publicly and answer over HTTPS. Register the host visitors reach: if your apex domain redirects to `www`, register the `www` host rather than the apex, and never an internal origin hostname. The hostname is fixed once registered. **2. Create an API key** Create a Dynamic Bot Rendering API key and copy it. The raw value is shown once, so store it in your CDN's secret store immediately. One key covers every domain registered to your organization, including domains you add later, so most customers need only one. Create additional keys when you want to rotate without downtime, or to manage rotation and revocation separately across properties. Additional keys are still organization-wide, not restricted to one property. **3. Set a policy and publish a test page** Give the domain a policy that opts at least one public page in with mode `serve`, render a candidate for that page, review it, and publish it. Keep the published URL and its expected HTML for verification. After configuring your CDN, an assistant request for that URL should return `x-concierge-cache: HIT` and the rendered HTML. Repeated requests never substitute for publication: a `MISS` stays a `MISS` until a render is published. > [!WARNING] > > Revoking a key affects every site using it. If you share one key across properties, rotate deliberately: create the replacement, roll it out to each CDN, then revoke the old one. ## Choose your CDN > **[Cloudflare](/dynamic-bot-rendering/cloudflare)** > > One Worker on your zone. > **[Amazon CloudFront](/dynamic-bot-rendering/cloudfront)** > > One CloudFront Function, without Lambda\@Edge. > **[Vercel](/dynamic-bot-rendering/vercel)** > > One routing rule in `vercel.json`. Running something else, such as Akamai, Fastly, or a custom proxy? The underlying contract is three request headers on a `GET`. Contact Profound support and we'll help you map it. # Vercel setup Source: https://docs.tryprofound.com/dynamic-bot-rendering/vercel Route AI assistant traffic to Profound Dynamic Bot Rendering with a single routing rule in vercel.json, with no changes to your application code. This guide adds one routing rule to your Vercel project. The rule matches requests by `User-Agent`, excludes Profound's own loop-protected fetches, and rewrites matching requests to Profound with your API key and public host attached as request headers. Nothing in your application changes. Vercel's edge network evaluates the rule before your functions run, and requests from anything other than a supported assistant never match it. Requests are rewritten to `https://concierge.tryprofound.com/v1/concierge/vercel/{path}`. Profound reconstructs the original path and query from the rewritten URL, so there is no `x-concierge-url` header to maintain. Which paths are rendered is decided by your [policy](/dynamic-bot-rendering/overview#how-rendering-and-serving-are-controlled) in Profound, not by the rule: an assistant request for a path you have not opted in is passed straight through to your deployment. > [!WARNING] > > **Define the rule in `vercel.json` or `vercel.config.ts`, not in the dashboard.** Confirm that the deployed transform expands the environment variable rather than sending `$PROFOUND_CONCIERGE_KEY` as literal text. A literal value is rejected with `401` and `x-concierge-auth: unknown-key`. > > Before production, validate environment expansion and route precedence in an isolated deployment using a nonsecret test variable and a diagnostic endpoint you control. Do not send your API key to a diagnostic endpoint or log it. Confirm that existing dashboard and framework routes do not override the tested rule. > [!WARNING] > > **Vercel's routing integration does not provide CDN-level failover.** Profound falls back to your origin only after a request is authenticated and valid. A Profound outage or a hard rejection can reach the assistant as an error, because this external rewrite has no secondary origin to retry. ## Prerequisites * A Vercel project you can deploy * Your Dynamic Bot Rendering API key, a registered domain, a policy that opts your public pages in, and a known published test page. See [Before you start](/dynamic-bot-rendering/overview#before-you-start). * Confirm that deployment protection, firewall rules, and bot challenges permit assistant traffic and Profound's origin fetches without weakening access controls. ## Setup **1. Add the API key to your project environment** In the Vercel dashboard, open **Project → Settings → Environment Variables** and add: | Name | Value | Environments | | - | - | - | | `PROFOUND_CONCIERGE_KEY` | Your Dynamic Bot Rendering API key | Production only | Keep the key in the environment, never in the rule file. The rule file is committed to your repository. **2. Add the routing rule** Add the following route to your project configuration, replacing `www.example.com` with your registered public host. Use whichever file your project already has. ```json vercel.json theme={null} { "routes": [ { "src": "^/(.*)$", "has": [ { "type": "header", "key": "User-Agent", "value": "(?i).*(?:duckassistbot|chatgpt-user|gemini-deep-research|perplexity-user|amzn-user|mistralai-user|claude-user|claude-code|codex).*" } ], "missing": [ { "type": "header", "key": "x-concierge-request", "value": "^1$" } ], "dest": "https://concierge.tryprofound.com/v1/concierge/vercel/$1", "transforms": [ { "type": "request.headers", "op": "set", "target": { "key": "x-concierge-api-key" }, "args": "$PROFOUND_CONCIERGE_KEY", "env": [ "PROFOUND_CONCIERGE_KEY" ] }, { "type": "request.headers", "op": "set", "target": { "key": "x-concierge-host" }, "args": "www.example.com" } ] } ] } ``` ```ts vercel.config.ts theme={null} import type { VercelConfig } from '@vercel/config/v1'; export const config: VercelConfig = { routes: [ // Route recognized assistants to Profound unless x-concierge-request is set to 1 { src: '^/(.*)$', has: [ { type: 'header', key: 'User-Agent', value: '(?i).*(?:duckassistbot|chatgpt-user|gemini-deep-research|perplexity-user|amzn-user|mistralai-user|claude-user|claude-code|codex).*', }, ], missing: [ { type: 'header', key: 'x-concierge-request', value: '^1$', }, ], dest: 'https://concierge.tryprofound.com/v1/concierge/vercel/$1', transforms: [ { type: 'request.headers', op: 'set', target: { key: 'x-concierge-api-key', }, args: '$PROFOUND_CONCIERGE_KEY', env: ['PROFOUND_CONCIERGE_KEY'], }, { type: 'request.headers', op: 'set', target: { key: 'x-concierge-host', }, args: 'www.example.com', }, ], }, ], }; ``` > [!WARNING] > > Preserve existing routing, redirects, authentication, and framework behavior. Check configuration validation and generated build output for route order and compatibility with existing properties. Current [Vercel routing documentation](https://vercel.com/docs/project-configuration/vercel-json#routes-vs-higher-level-properties) describes coexistence with higher-level properties; do not automatically convert your routing configuration. If integration requires a routing redesign, stop and review that separately. **3. Deploy and verify** Deploy the project, then: ```bash theme={null} curl -sD - -o /dev/null https://www.example.com/pricing -A 'chatgpt-user' ``` Check the HTTP status, a valid `x-concierge-request-id`, and the expected `x-concierge-bot-kind`. On your known published page, also require `x-concierge-cache: HIT` and the expected rendered body. Verify that browser requests and search crawlers keep their existing behavior, and that a request carrying `x-concierge-request: 1` reaches your deployment directly. Send a `GET` request. Profound's contract covers `GET` only, so use `curl -sD - -o /dev/null` rather than `curl -I`. Full checks are in [Verify and troubleshoot](/dynamic-bot-rendering/verify-and-troubleshoot). ## What each part of the rule does | Part | Purpose | | - | - | | `src` + `dest` | Captures the whole path as `$1` and rewrites it onto Profound's Vercel endpoint, preserving the query string. Profound decides per path whether to serve a render or pass the request through to your deployment. | | `has` on `User-Agent` | Matches the [supported assistants](/dynamic-bot-rendering/overview#supported-ai-assistants), case-insensitively. Browsers and search crawlers never match, so they never leave your existing route. | | `missing` on `x-concierge-request` | Loop protection. Profound stamps `x-concierge-request: 1` on its own origin fetches. Excluding that value lets those fetches bypass the rule and reach your deployment directly. | | `x-concierge-api-key` transform | Injects the key from the project environment at request time. | | `x-concierge-host` transform | The public host, hard-coded per route. It must match a domain registered in Profound. | > [!WARNING] > > Keep the `missing` condition's `value` exactly `^1$`, or omit `value` to test for the header's absence. Any other regular expression that doesn't match the stamped value silently makes the exclusion a no-op. Profound's own fail-open fetches are then rewritten back to Profound and rejected with `400`. Non-`GET` requests from a matching `User-Agent` are also rewritten and receive `405` from Profound. Supported assistants fetch pages with `GET`, so this does not affect normal traffic. Add `"methods": ["GET"]` to the route if you want other methods to stay on your deployment. ## Multiple domains The `x-concierge-host` transform is a fixed string, so one rule serves one public host. If a single Vercel project serves several registered domains, add one route per host and narrow each with a `has` condition on the `host` header: ```json theme={null} { "type": "header", "key": "host", "value": "^www\\.example\\.com$" } ``` Place these routes before any catch-all route. ## Preview deployments The rule above fires on every hostname the project serves, including preview deployments. Because `x-concierge-host` is fixed, a preview request would be identified to Profound as production. Scoping `PROFOUND_CONCIERGE_KEY` to Production only, as in step 1, means preview requests carry an unexpanded literal key and Profound rejects them with `401`, so they can never serve or render production content. If you want assistant requests on preview hosts to reach your preview deployment normally instead, add the `host` condition from [Multiple domains](#multiple-domains) so the rule only matches your production hostname. See [environment variables in routes](https://vercel.com/docs/project-configuration/vercel-json#using-environment-variables-in-routes) for how unset variables are handled. ## Cache and content checks Confirm deployed rewrite cache behavior before enabling traffic. [Vercel honors upstream cache headers](https://vercel.com/docs/routing/rewrites#caching-rewrites-to-external-origins) by default for projects created on or after April 6, 2026. Older projects can opt in through project settings or `x-vercel-enable-rewrite-caching`; that header set to `0` opts out. Check project age, the current setting, and route overrides rather than assuming a default. Do not assume a rendered response has `Cache-Control: no-store`: the Vercel adapter does not guarantee it. If your cache rules make these responses cacheable, verify separation between assistant and human responses and between host, path, and query variants. If caching is enabled, verify expiration and invalidation after publishing a replacement, unpublishing, or pausing serving: a CDN entry can outlive the change in Profound. Profound does not forward viewer cookies or authorization to your origin, and stored pages are not personalized by session, language, or geography. Review same-URL locale and header variants before opting a page in. ## Security notes * **The loop marker is client-spoofable by design.** Anyone sending `x-concierge-request: 1` skips the rewrite and gets your live origin page, the same content a non-assistant `User-Agent` receives. It skips rendering and telemetry for that request. Never use this marker to bypass authentication or firewall checks. * **The key stays out of the repository.** It's referenced from the project environment, never written into the rule file. * **Profound re-derives the assistant itself.** It never trusts a caller-supplied identity header, only the forwarded `User-Agent`. * **Credentials never reach your origin through Profound.** The rule forwards whatever headers the assistant sent, but Profound drops cookies and authorization headers when it fetches your origin, and only opted-in public pages are rendered. # Verify and troubleshoot Source: https://docs.tryprofound.com/dynamic-bot-rendering/verify-and-troubleshoot Confirm Dynamic Bot Rendering is routing correctly, read the x-concierge-* diagnostic headers, and resolve the common setup failures. ## Test your setup Every check below sends a `GET` request. Profound's contract covers `GET` only, so use `curl -sD - -o /dev/null` rather than `curl -I`, which sends `HEAD`. A `HEAD` response may come from your origin or from a handler that omits the body, and tells you nothing about routing. **1. Assistant traffic should reach Profound** ```bash theme={null} curl -sD - -o /dev/null https://www.example.com/pricing -A 'chatgpt-user' ``` Look for a UUID in `x-concierge-request-id` and `x-concierge-bot-kind: chatgpt-user`. Together they prove your CDN routed the request to Profound and Profound recognized the assistant. They do not prove a rendered page was served: a `MISS` with `x-concierge-failopen: 1` means Profound returned your origin's live content. **2. Your published test page should be served from Profound** On the page you published during [setup](/dynamic-bot-rendering/overview#before-you-start), also require `x-concierge-cache: HIT` and the rendered HTML. Save the body for comparison, and let curl decompress it in case Profound served it gzip-encoded: ```bash theme={null} curl -sS --compressed -D /tmp/dbr-headers.txt -o /tmp/dbr-page.html \ https://www.example.com/pricing -A 'chatgpt-user' ``` If this request is a `MISS`, check the `x-concierge-policy` headers as described in [Reading the result](#reading-the-result). Repeating the request does not turn a `MISS` into a `HIT`; only publishing a render does. **3. Human traffic should be untouched** ```bash theme={null} curl -sD - -o /dev/null https://www.example.com/pricing \ -A 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36' ``` Expect no `x-concierge-*` headers and the same page content as before. Compare latency and cache hit rates with your baseline too: a Worker or a shared cache-policy change can affect them even when routing is unchanged. **4. Search crawlers should be untouched** ```bash theme={null} curl -sD - -o /dev/null https://www.example.com/pricing -A 'Googlebot/2.1' ``` Also expect no `x-concierge-*` headers. If this request is routed, see [Common problems](#common-problems). **5. Excluded traffic should keep its existing behavior** In staging, send non-`GET` methods, requests to `/api/users`, `/graphql`, authentication, admin, framework resources, and assets, including extensionless endpoints. Use harmless fixture endpoints for methods that could modify data, and nonsecret test values for cookies and authorization headers. All of these must stay on your existing route. On Vercel, also test preview and alternate hosts. **6. Test failure behavior safely** Use staging or an isolated configuration, record the original settings, and restore them after each test. * **Cloudflare:** test an unreachable upstream, a response-header timeout, and one of the configured fallback statuses. Expect origin content with `x-concierge-cdn-failover: 1`. Redirects, `404`, and `429` pass through, and a response that has already started streaming cannot be replaced. * **CloudFront:** test primary connection and response timeouts within the configured budget and the selected status criteria. Expect the fallback origin for configured failures, but not for `401`. Send uncached requests, and expect cached fallback responses to persist until their TTL expires even after you restore the primary. * **Vercel:** there is no CDN-level failover. During a Profound outage or after a hard rejection, an assistant can receive an error. Do not expect transparent origin fallback. After restoring the configuration, wait for propagation and repeat the routing and published-page checks. ## Run setup verification from the dashboard The Profound dashboard can test your routing for you. It sends a request with each of the nine supported assistant `User-Agent` values to a URL on your registered host, from outside your network, and reports which ones your CDN routed to Profound. These probes carry no credentials and no loop marker, so they look like real assistant traffic to your CDN. An assistant counts as routed only when its response carries a valid request ID and the matching bot kind. A `MISS`, a paused domain, a redirect, or a non-`200` status can still confirm routing; page health is reported separately. Make sure the URL you test is on your public-page allowlist, or every assistant will correctly show as not routed. > [!NOTE] > > Setup verification is a live observation of one URL at one moment. It confirms that your CDN rule fires for each assistant. It does not verify domain ownership, and it is not a substitute for checking your published test page by hand. ## Response header reference | Header | Meaning | | - | - | | `x-concierge-request-id` | A UUID Profound assigns to every request it handles. Its absence means Profound never saw the request: the rule did not match, the CDN failed over, or a proxy stripped the header. | | `x-concierge-cache` | `HIT` when a published render was served, `MISS` when Profound fell back to your origin. | | `x-concierge-bot-kind` | The assistant Profound recognized, or `unknown`. | | `x-concierge-failopen` | `1` when live origin content was returned instead of a stored render. | | `x-concierge-origin-status` | Your origin's HTTP status, when your origin was fetched. | | `x-concierge-policy` | The effective mode for this request: `serve`, `warm`, or `off`. See [policy modes](/dynamic-bot-rendering/overview#policy-modes). | | `x-concierge-policy-source` | Which level decided that mode: `page` for a page rule, `domain` for the domain default or a paused domain, or `default` when no rule applied. | | `x-concierge-policy-rule` | The ID of the winning rule, when there was one. | | `x-concierge-auth` | On `401` only: `missing-key`, `unknown-key`, or `inactive-key`. | | `x-concierge-cdn-failover` | Set by the Cloudflare Worker in these guides, not by Profound, when it served your origin after a failed upstream call. | ## Reading the result | What you see | What it means | | - | - | | `cache: HIT` | A published render was served. Also check the status and the body. | | `MISS` + `failopen: 1` + `policy: serve` | Policy allows serving, but the URL has no usable publication. Render, review, and publish a candidate for this exact path and query. | | `MISS` + `failopen: 1` + `policy: warm` | `warm` serves origin content even when a publication exists. Change the winning rule to `serve` once you are ready. | | `MISS` + `policy: off` + `policy-source: default` | No rule covers this path, so it is not opted in. Add a domain default or a page rule. | | `MISS` + `policy: off` + `policy-source: domain` + no rule ID | The domain is paused. Resume it in the dashboard. | | `MISS` + `policy: off` + a rule ID | The winning rule is `off`, or it excludes this assistant from its allowed list. With `policy-source: domain` that rule is the domain default. Check its mode and allowed assistants. | | `bot-kind: unknown` | Your CDN routed a `User-Agent` Profound doesn't recognize. The request added a round trip and got origin content. Align your rule with the [supported list](/dynamic-bot-rendering/overview#supported-ai-assistants). | | No `x-concierge-*` headers on an assistant request | Profound never saw the request. Check the rule's match conditions and, on Cloudflare and CloudFront, whether CDN failover fired. | ## Error responses Profound only falls back to your origin after a request is authenticated and valid. Configuration errors are rejected rather than proxied. Cloudflare's Worker masks its configured rejection statuses by serving your origin, and CloudFront masks `400` and `403` but not `401`. Vercel has no retry. When an origin page appears where you expected a rejection, inspect your CDN's diagnostics. | Status | Cause | Fix | | - | - | - | | `401` + `x-concierge-auth: missing-key` | No `x-concierge-api-key` header arrived. | Confirm that the rule attaches the key. Never log or echo a real key while diagnosing. | | `401` + `unknown-key` | A value arrived but matches no key. | Check for truncation, whitespace, or a literal `$PROFOUND_CONCIERGE_KEY` that was never expanded. On Vercel, validate variable expansion with a nonsecret test value before using the real key. | | `401` + `inactive-key` | The key was revoked. | Create a new key and roll it out. | | `403` | The host isn't registered, or belongs to another organization. | Register the exact public host in the dashboard. It must match after normalization: lowercase, no trailing dot, no port. | | `400` | A malformed host or path, an absolute URL where a path was expected, a `#` fragment, or an inbound loop marker. | Usually a rule sending a full URL instead of a path, or a broken loop-protection condition. | | `405` | A non-`GET` method reached Profound. | Route only `GET` to Profound, and test with `curl -sD - -o /dev/null` rather than `curl -I`. | | `502` | Profound could not reach your origin and had no publication to serve, or a backend lookup failed. | Check that your origin is reachable from the public internet and not blocking Profound's fetches. A CDN can also generate its own `502`, so check its diagnostics too. | ## Common problems > **Googlebot or other search crawlers are being routed** > > Your `User-Agent` pattern matches something outside the supported token list. Compare it with the pattern in your setup guide and the [supported assistants](/dynamic-bot-rendering/overview#supported-ai-assistants). Search crawlers such as `Googlebot` must keep reaching your origin. > **Every assistant request shows bot-kind: unknown (CloudFront)** > > CloudFront replaces the viewer `User-Agent` with `Amazon CloudFront` on origin requests unless an origin request policy forwards it. Profound then has nothing to classify. Use the narrow custom origin request policy in the [CloudFront guide](/dynamic-bot-rendering/cloudfront). Avoid **AllViewer**, which also forwards the viewer `Host` and can break the connection to Profound. Add `User-Agent` to the origin request policy, not the cache key. > **One assistant gets origin content while others get the render** > > The winning rule's allowed-assistant list excludes it. The response shows `x-concierge-policy: off` together with the rule ID. Add the assistant to the list, or clear the list so the rule inherits the domain default. > **Assistants get a cached human page, or humans get a rendered page** > > Some cache layer stores HTML without separating assistant and human responses, or without separating hosts, paths, and query strings. > > On CloudFront, include `x-concierge-route` in the cache key, keep Minimum TTL at `0`, and check host and query variants. On Cloudflare, verify that the Worker's upstream call bypasses cache; `User-Agent` keying alone cannot separate page identities because every page uses the same upstream URL. On Vercel, inspect the project's external-rewrite cache settings. On every provider, also check what happens to cached entries after you publish a replacement, unpublish, or pause: a CDN entry can outlive the change in Profound. > **Requests loop, or return 400 with a valid-looking rule** > > Loop protection is failing. Your rule must let requests carrying `x-concierge-request` pass straight through to your origin. Profound stamps that header on its own origin fetches, and rejects any inbound request that carries it with `400`, so a broken exclusion turns into one failed request rather than a loop. > > On Vercel, this is a `missing` condition on `x-concierge-request` with the value `^1$`, the marker Profound stamps. Any other regex silently disables the exclusion, because a `missing` condition with a value only excludes requests whose header matches it. > **Query-string variants serve the wrong content** > > Query strings are part of the page identity. If your CDN strips them before the origin request, `/product?id=a` and `/product?id=b` collapse to `/product`, and the wrong variant is rendered and served. > > On CloudFront, include the query strings your pages vary on, or "All", in the cache policy. An origin request policy can forward extra query strings without keying them, so verify forwarding and cache identity separately. > **Nothing is ever served from cache, even after many requests** > > Read `x-concierge-policy` and `x-concierge-policy-source` on the response. No matching rule means `off`, and `warm` serves live origin content even when a publication exists. Set the winning rule to `serve`. > > Then confirm that a candidate for this exact path and query was reviewed and published. Approval alone does not publish it, and repeated requests do not publish it either. A candidate held as pending stays pending until someone approves, rejects, or publishes it. If the page is published and policy is `serve` but you still see a `MISS`, check your CDN caches and your origin's reachability. > **Requests are challenged, blocked, or return login content** > > Check WAF rules, bot challenges, deployment protection, and origin allowlists for both incoming assistant traffic and Profound's origin fetches. Profound does not forward viewer cookies or authorization headers, so protected or session-sensitive pages belong outside this setup. The loop marker is spoofable and must not be used as a firewall or authentication bypass. If your origin needs a way to identify Profound's fetches, contact Profound support. ## Turning it off To stop serving renders without touching your CDN, pause the domain in the Profound dashboard. Every assistant request goes to your origin while your rules, renders, and publications are preserved, and resuming restores them. A pause takes effect in Profound immediately, but responses your CDN has already cached persist until they expire. A pause is not a substitute for CDN-level failover during an outage, because the request still has to reach Profound. To remove the integration, restore the CDN configuration you recorded before setup: * **Cloudflare:** remove the added Worker route or restore its previous binding without removing other Worker logic. * **CloudFront:** restore the previous viewer-request association and policies. Use **No association** only when there was none before. * **Vercel:** remove only the added route from `vercel.json`, preserve other routing, and redeploy. Routing changes take effect after configuration or deployment propagation. Previously cached fallback responses may persist until expiry or your normal invalidation process. Verify original routing and content after rollback. Registered domains, keys, and publications remain in Profound until you remove them. # Categories in Profound Source: https://docs.tryprofound.com/getting-started/categories How categories group the prompts, topics, assets, and regions in Answer Engine Insights > [!TIP] > > Find definitions of unfamiliar terms and concepts in [Profound glossary](/getting-started/glossary). Categories organize your [Answer Engine Insights (AEI)](/answer-engine-insights/about) data. Each category groups the prompts, topics, assets (your own brands and competitors), and regions you track for a market, business unit, brand, or geography. Categories keep markets separate. For example, a bank that competes in credit cards, mortgages, and wealth management faces different competitors and questions in each market, so each gets its own category. Profound runs the prompts and reports the results inside that boundary, so every AI search data point compares you against the right competitors on the right questions. ## Category structure and how it relates to other Profound building blocks ![Diagram of the hierarchy of Profound categories, including their relationship to organizations and a Profound account.](https://mintcdn.com/profound-37face47/LU_swtbqvG5kIsMS/images/answer-engine-insights/categories-1.png?fit=max\&auto=format\&n=LU_swtbqvG5kIsMS\&q=85\&s=60be3ca5b18a94ccf55bcc33de5d41d5) **Your Profound account** holds your total prompt allowance and the regions, languages, and platforms it can monitor. Categories draw from that pool: each one takes a share of the prompts and a subset of the regions, languages, and platforms. **An organization** is a bucket for all of your Profound data, including [AEI](/answer-engine-insights/about), [Agents](/agents/about), [Sheets](/sheets/getting-started), [brand context](/context-manager/about), [Aim](/aim/about) conversations, and [Documents](/documents/about). An organization uses categories to organize its AEI data. **A category** is the market unit you analyze, for example "financial services" or "home decor products." Each category has a name, a share of the account's prompts, and the regions, languages, and platforms it runs in, chosen from those available to your account. An organization can own and use multiple categories. **Assets** are the brands or products you track in a category. An asset is either owned (yours) or a competitor. Every category needs at least one enabled owned asset. Competitors default to a limit of five per category. **Topics** are the subject areas your prompts cover, such as "Purchase decisions" or "Travel rewards." Every prompt belongs to one topic, so topics are how analytics reports group prompts. The Prompt generator uses topics to generate relevant prompts. **Prompts** are the questions Profound sends to answer engines. A prompt lives in one category and one topic, and runs in one language. Prompts have [types](/getting-started/glossary#analysis-type) that define which analysis Profound runs on the responses: Visibility, [FactCheck](/answer-engine-insights/factcheck/about), or [Sentiment](/answer-engine-insights/sentiment/about). **Tags** are optional labels you add to prompts inside a category to organize them in a way the topics don't cover, for example by campaign or buying stage. A prompt can carry multiple tags. **Personas** are the audience segments you define for a category. Learn more in [Personas in Answer Engine Insights](/answer-engine-insights/personas). **Regions**, **languages**, and **platforms** define where prompts run, in which language, and on which answer engines. View your organization's lists in [Analytics Setup](/platform-config/analytics-setup). > [!TIP] > > Learn more about prompts, topics and tags in [How to create topics and prompts to track in Profound](/answer-engine-insights/how-tos/create-topics-and-prompts). ### When you have multiple organizations and categories If you work with more than one organization or category, here's how they relate: ![Example diagram showing categories owned, used, and shared across multiple organizations.](https://mintcdn.com/profound-37face47/LU_swtbqvG5kIsMS/images/answer-engine-insights/categories-2.png?fit=max\&auto=format\&n=LU_swtbqvG5kIsMS\&q=85\&s=a893343a7fca86c2b811053f45d291ee) * An organization can create, own, and share categories with other organizations. * Your organization can use a shared category, but only the owning organization can edit it. * Your Profound contract sets the number of categories your organization can use. ## Where you work with categories * **Answer Engine Insights (AEI):** Every category-scoped page has a selector at the very top of the page that shows the owning organization, the categories you can view, and the owned assets in the selected category. Filters for topics, tags, regions, platforms, and personas apply within that category. Learn more in [Interpret Answer Engine Insights v2](/answer-engine-insights/interpret). > [!TIP] > > [AEI](/answer-engine-insights/about) reports on one category at a time. When you need the bigger picture, use [Aim](/aim/about) and [Dashboards](/custom-dashboards/about) to combine analytics data across your categories. * **Analytics Setup:** Admins of enterprise organizations use [Analytics Setup](/platform-config/analytics-setup) to create and manage categories, allocate prompts, choose regions and languages, and add assets. * **People.** When you invite a member on the **People** page, choose the categories they can open in the **Category** field. Learn more in [Add and manage organization members](/platform-config/people/add-and-manage-org-members). * **Onboarding.** New users set up their first category in the onboarding flow: confirm your brand, add owned and competitor assets, review generated topics, and generate prompts. * **Profound API and MCP.** Reports provided by the API or MCP tools are scoped by category. Learn more in the [REST API reference](/rest-api/introduction) and [MCP documentation.](/mcp/capabilities/analytics-capabilities) # Profound usage pricing: Credits Source: https://docs.tryprofound.com/getting-started/credits How AI Marketer (Aim) conversations and Agent runs consume credits, what your plan includes, and what happens when credits run out ## What credits are Credits are the unit Profound uses to measure the AI work your organization runs: conversations with [AI Marketer (Aim)](/aim/about), [Agent](/agents/about) runs, and [Sheets](/sheets/getting-started). Each Profound plan includes a credit allotment, and every piece of AI work draws from that shared balance. The cost of a piece of work depends on how much it does. A short question to Aim about last week's visibility uses fewer credits than a message that researches a topic, generates images, or drafts an article. A Workflow with a few steps uses fewer credits than an Agent that calls several AI models and reasons through a complex task. ## What uses credits * **AI Marketer conversations**: every message you send to Aim consumes credits, whether you chat in the platform, inside a [Project](/projects/about), a [Profound Doc](/documents/about), a [Sheet](/sheets/getting-started), or in [Slack](/integrations/slack/connect-slack-to-profound). The cost of each message reflects the work Aim does to answer it, including any tools it calls and images it generates. When Aim runs one of your Agents, that run is billed as an Agent run. * **Agent and Workflow runs**: every run consumes credits, including test runs in the Agent and Workflow Builders, scheduled runs, runs started from Aim, and runs started through [Profound MCP](/mcp/overview). * **Sheets runs**: a [Sheet](/sheets/run-workflows-from-sheets) runs a Workflow once per row, and each row is billed as a run. * **Prompt Research Reports**: generating a [Prompt Research Report](/prompt-volumes/about#prompt-research-reports) consumes credits. Browsing your Answer Engine Insights, Prompt Volumes, and Agent Analytics data doesn't consume credits. ## Plans and credit allotments | Plan | Credits | | - | - | | Trial | A limited, one-time allotment of AI Marketer credits. Trial credits don't renew. | | Enterprise | A credit package sized for your team by the Profound accounts team. Packages can be adjusted over time as your needs change. | | Agency Growth | 400 credits per month per client workspace. | To size or adjust your package, [contact the Profound accounts team](https://www.tryprofound.com/contact-sales). > [!NOTE] > > Pitch workspace credits in [Agency Mode](/agencies/agency-mode-overview) are different from the usage credits described on this page. They are a separate allowance for creating and extending pitch workspaces. ## Estimate and track credit usage Admins can check the organization's credit balance and usage in the organization settings. The estimated cost of a Workflow run also shows before you start it: * **In the Workflow Builder**: hover over **Run test** to see the **Estimated usage** for the whole Workflow, or over a node's **Test node** button to see the estimate for that node. After a test, **Run details** shows the **Credits used**. * **On a Workflow's run page**: **Estimated usage** appears before you select **Run**, and **Credits used** replaces it once the run completes. * **In Sheets**: the Workflow preview shows the estimated cost to run one row before you run the Sheet. Final credit usage may vary depending on the input and generated output. Enterprise admins can also set a credit limit per member, so one heavy user can't consume the organization's whole balance. A member who reaches their limit can't run Workflows, Sheets, or Prompt Research Reports until their allocation is increased or the organization balance renews. Their usage still counts toward the organization total. ## When you run low or run out Profound warns you before work stops: * **Before a costly Workflow run**: if the estimated cost is higher than the credits you have left, a dialog warns that **This run may exceed your credit limit** and shows the projected overage. Confirm to continue, or select **Cancel**. Sheets runs estimated at 500 credits or more ask you to confirm the high-cost run even when the balance covers it. * **Overage**: depending on how your account is configured, your organization either keeps running on overage credits after the allotment is used, or pauses until the balance renews. While you're on overage credits, Workflow pages show a **Plan limit reached** banner. Ask your account team which setting applies to you. * **Out of credits**: Workflow pages show **Agent runs disabled** and **Run test** is unavailable. Work resumes when the balance renews or your account team adds credits. * **Per-user limit reached**: only that member is blocked. The rest of the organization keeps running. * **Trial**: when trial credits run out, Profound asks you to update your plan to Enterprise. ## Do API calls consume credits? No. Pulling data from the [Profound API](/rest-api/introduction) doesn't consume credits. Credits are only charged where AI work runs: an Aim conversation, an Agent or Workflow run, a Sheet run, or a Prompt Research Report, including runs you start through [Profound MCP](/mcp/overview). # Glossary Source: https://docs.tryprofound.com/getting-started/glossary Definitions of the metrics, objects, and features you'll find in Profound This glossary defines the metrics, objects, and features you'll find in Profound. For definitions of more general AEO/AI search terms, see our [AI Search Glossary](https://www.tryprofound.com/blog/ai-search-glossary). > [!TIP] > > Search the terms you're interested in with Ctrl+F or Cmd+F. ## A ### Accuracy prompt A prompt that checks whether what AI says about your product is factually correct: pricing, features, integrations, specs, and anything else with a right answer. In Profound, accuracy prompts run with [FactCheck](/answer-engine-insights/factcheck/about). Learn more: [Six types of prompts in Profound's AEO guide](https://www.tryprofound.com/aeo-guide/chapter-3#six-types-of-prompts), [About FactCheck](/answer-engine-insights/factcheck/about) ### Accuracy Score A [FactCheck](/answer-engine-insights/factcheck/about) metric that shows how much of what answer engines say about your brand is correct. Profound extracts the claims made in AI responses about your brand, checks each one against your [Knowledge Base](/context-manager/knowledge-bases-and-brand-kits), and reports the share that is accurate. The score is calculated as accurate claims / (accurate claims + inaccurate claims). For example, FactCheck extracts 50 claims. 30 of those can be verified against the Knowledge Base, of which 24 are accurate and 6 are inaccurate. The accuracy score is 24 / (24 + 6) = 80%. The 20 unverifiable claims don't affect the score. Learn more: [About FactCheck](/answer-engine-insights/factcheck/about) ### Activity Logs A single audit trail of events in your Profound organization, such as sign-ins, permission changes, and configuration updates. Admins use Activity Logs to review who did what and when. Available under Platform Management. Learn more: [About Activity Logs](/platform-config/activity-logs/about), [Activity logs platform documentation](/platform-config/activity-logs/about) ### Admin A Profound [role](/platform-config/people/roles-and-permissions) with full access to organization settings, including team management, [Prompt Designer](/answer-engine-insights/prompt-designer) access, and usage reporting. Some actions, such as modifying prompts or creating [Agency Mode](/agencies/agency-mode-overview) workspaces, require the Admin role. Learn more: [Roles and permissions](/platform-config/people/roles-and-permissions) ### AEO Content Scorecard A content optimization node for [Workflows](/agents/workflows/about-workflows) that scores a piece of content against AEO best practices and returns recommendations. Learn more: [AEO Content Scorecard](/agents/workflows/nodes/content-optimization/aeo-content-scorecard) ### Agency Mode A mode for agencies and consultancies that manage several brands under one account. Each brand gets its own workspace with independent prompts, competitors, tracked platforms, and configuration. Agency Mode supports short-term pitch workspaces and long-term client workspaces, both managed from the Agency Mode dashboard. Learn more: [Agency Mode overview](/agencies/agency-mode-overview) ### Agent An automation that [AI Marketer (Aim)](/aim/about) builds and runs for you from a plain-English description. You tell it the job, connect the tools it needs, and choose when it runs: on demand, on a schedule, or when something happens in an app, on the web, or in your Profound data. On each run, Aim works out the steps itself, so the wording and the steps can differ between runs within the guardrails you set. For a step that must run the same way every time, an Agent can run a [Workflow](/getting-started/glossary#workflow). Learn more: [About Agents](/agents/about) ### Agent Analytics Infrastructure-level monitoring of how AI crawlers and assistants access your website. Profound collects request data at the CDN or server layer, classifies the AI traffic it finds, and reports on bot visits and AI referrals by page. Agent Analytics feeds the bot and referral data in [Pages](/pages/about) and powers [network benchmarking](/pages/about#network-benchmarking). Learn more: [About Agent Analytics](/agent-analytics/overview) ### Agent Builder The page where you create and refine an [Agent](/getting-started/glossary#agent). On the left is a chat with Aim: describe what the Agent should do, answer its questions, run the Agent, and ask for changes. On the right is the settings panel with the Agent's run triggers, inputs, instructions, outputs, tools, context, and advanced settings. Edits apply to the Agent right away, with no separate publish step. Learn more: [Get started with Agents](/agents/getting-started), [Building blocks of an Agent](/agents/building-blocks-of-agent) ### AI Marketer Your AI marketing teammate in Profound, also known as [Aim](/aim/about). It powers every chat surface in the platform, suggests [Projects](/projects/about) and tasks, and can use your [Agents](/agents/about) to do the work. It's grounded in the context you keep in [Context Manager](/context-manager/about). Learn more: [About Profound's AI Marketer (Aim) ](/aim/about) ### AI referral A visit to your website by a human who arrived from an AI answer, as opposed to a visit by an AI [bot](/agent-analytics/crawler-verification). Tracked by [Agent Analytics](/agent-analytics/overview). Learn more: [About Agent Analytics](/agent-analytics/overview) ### Aim The short name for [AI Marketer](/aim/about). Learn more: [About Profound's AI Marketer (Aim) ](/aim/about) ### Analysis type A setting on a prompt that controls which analyses Profound runs on its response: Visibility, [Sentiment](/answer-engine-insights/sentiment/about), or [FactCheck](/answer-engine-insights/factcheck/about). Every prompt produces visibility data, while other prompt types need to be assigned in the [Prompt Designer](/answer-engine-insights/prompt-designer). Also known as prompt type. Learn more: [About Sentiment](/answer-engine-insights/sentiment/about) ### Answer engine An AI service that answers a user's prompt in real time, such as ChatGPT, Gemini, Claude, Perplexity, or Google AI Overviews. Profound sends your prompts to answer engines every day and analyzes the responses. In Profound and in the API, a tracked answer engine is called a platform or model. Learn more: [About Answer Engine Insights](/answer-engine-insights/about) ### Answer Engine Insights (AEI) The Profound product that shows how your brand performs across answer engines. Profound runs your prompts daily, collects the responses, and turns them into metrics: Visibility Score, Share of Voice, Average Position, Citation Share, Citation Coverage, Sentiment Score, and Accuracy Score. Learn more: [About Answer Engine Insights](/answer-engine-insights/about) ### Article Research Report A research node for [Workflows](/agents/workflows/about-workflows) that compiles a research report for a planned article, which downstream nodes can use to write grounded content. Learn more: [Article Research Report](/agents/workflows/nodes/research/article-research-report) ### Article Title Suggestion A content creation node for [Workflows](/agents/workflows/about-workflows) that proposes article titles for a topic or brief. Learn more: [Article Title Suggestion](/agents/workflows/nodes/content-creation/article-title-suggestion) ### Artifact An output that an [AI Marketer (Aim)](/aim/about) chat or an [Agent](/agents/about) produces, such as a [Profound Document](/documents/about), a [Sheet](/sheets/getting-started), or an image. Artifacts from chats in a [Project](/projects/about) appear in the Project's **Artifacts** section, where every member can open them. Learn more: [About Projects](/projects/about) ### Asset A brand, company, or product that Profound tracks in a category. Your own brand is an owned asset; the others are competitors. ### Attribute In [Sentiment](/answer-engine-insights/sentiment/about), a specific claim or pattern within a [theme](/answer-engine-insights/sentiment/about#themes-and-theme-attributes), with a positive or negative polarity. For example, "opaque pricing" is a negative attribute under a Pricing theme. Learn more: [About Sentiment](/answer-engine-insights/sentiment/about) ### Average Position The [average position](/answer-engine-insights/about#average-position) of your brand relative to competitors across responses. For example, McDonald's is listed first in half of the responses that mention it and second in the other half. Its Average Position is 1.5. Learn more: [About Answer Engine Insights](/answer-engine-insights/about) ## B ### Blacklist A mode in [Configure Competitors](/answer-engine-insights/settings#configure-competitors) that removes specific brands from all Answer Engine Insights analysis. Use it for brands that appear in your data but aren't relevant competitors, or that you aren't permitted to mention. Compare [Whitelist](/getting-started/glossary#whitelist). Learn more: [Answer Engine Insights settings](/answer-engine-insights/settings) ### Bot An automated agent that requests pages from your website. [Agent Analytics](/agent-analytics/overview) identifies and classifies AI bots by purpose: AI citation, AI indexing, AI training, and AI agent visits. Profound also operates [its own bots](/bots/introduction). Learn more: [Crawler verification](/agent-analytics/crawler-verification), [Profound bots](/bots/introduction) ### Bot Visits A view in [Pages](/pages/about) and [Agent Analytics](/agent-analytics/overview) that shows what AI bots see and can reach on your site: which crawlers visit a page, what content is hidden from them, and a `robots.txt` audit that lists the AI crawlers your site disallows. See also [Bot vs. Human Readable Content](/pages/about#bot-vs-human-readable-content). Learn more: [About Pages](/pages/about) ### Bot vs. Human Readable Content A [Pages](/pages/about) feature that compares what a person sees on a page with what an AI [bot](/agent-analytics/crawler-verification) can access. Content rendered with client-side JavaScript is often invisible to bots, so Pages flags hidden text blocks and headings and recommends how to expose them. Learn more: [About Pages](/pages/about) ### Brand The entity whose presence in AI answers you track. In Profound data, a brand is an asset. Your own brand is an owned asset, and competitors are the other assets in your category. ### Brand Context The tab in [Context Manager](/context-manager/about) that holds your [knowledge records](/context-manager/about#knowledge-records-that-build-themselves) and identifies [knowledge gaps](/context-manager/about#identified-gaps). Learn more: [About Context Manager](/context-manager/about) ### Brand Kit A brand identity profile that defines how Profound should write on your behalf: brand information, writing style, and a writing sample. Profound generates a Brand Kit from your website URL, and you can edit it at any time. Where a [Knowledge Base](/context-manager/knowledge-bases-and-brand-kits) defines what to say, a Brand Kit defines how to say it. Part of [Context Manager](/context-manager/about). Learn more: [Knowledge Bases and Brand Kits](/context-manager/knowledge-bases-and-brand-kits) ### Bulk Analysis A [Prompt Volumes](/prompt-volumes/about) feature that compares several keywords at once and ranks them by prompt volume, so you can prioritize what to track. Learn more: [About Prompt Volumes](/prompt-volumes/about) ### Bulk upload Adding many prompts at once by uploading a CSV in the [Prompt Designer](/answer-engine-insights/prompt-designer). Learn more: [Create, manage, and tag prompts in Prompt Designer](/answer-engine-insights/prompt-designer) ## C ### Call API A node for [Workflows](/agents/workflows/about-workflows) that sends an HTTP request to any external API and returns the response for later nodes to use. Learn more: [Call API](/agents/workflows/nodes/call-api) ### Category The workspace that holds one brand and its competitive set. A category contains assets, topics, prompts, tags, regions, Personas, and platforms. Learn more: [Categories in Profound](/getting-started/categories) ### Chart annotation A note pinned to a date on a time-series line chart in [Answer Engine Insights](/answer-engine-insights/about) that records an event, such as a product launch, a content refresh, or a change to your prompts. Learn more: [Chart annotations in AEI](/answer-engine-insights/chart-annotations) ### Citation A reference or link to a specific web page, article, or resource inside an answer engine response. Profound records which domains and pages are cited, how often, and for which prompts, and classifies each source into a citation category. Learn more: [About Answer Engine Insights](/answer-engine-insights/about) ### Citation Categories Classification of the sources answer engines cite. Learn more: [Answer Engine Insights settings](/answer-engine-insights/settings) ### Citation Coverage A metric in [Answer Engine Insights](/answer-engine-insights/interpret). Where Citation Share measures the proportion of all citations that point to a domain, Citation Coverage measures how widely that domain is cited across responses. For example, `mcdonalds.com` is cited in 30 of 100 responses, so its Citation Coverage is 30%, even if it accounts for a smaller share of all citations. Learn more: [Interpret Answer Engine Insights](/answer-engine-insights/interpret) ### Citation Decay A table in the Citations tab of [Answer Engine Insights](/answer-engine-insights/interpret) that shows how long sources keep getting cited after they first appear. Learn more: [Interpret Answer Engine Insights](/answer-engine-insights/interpret) ### Citation Domains A data node for [Workflows](/agents/workflows/about-workflows) that returns the top cited domains for a set of prompts, topics, or the whole category. Learn more: [Citation Domains Node](/agents/workflows/nodes/data/citation-domains) ### Citation Pages A data node for [Workflows](/agents/workflows/about-workflows) that returns the most cited pages for a set of prompts, topics, or the whole category. Learn more: [Citation Pages](/agents/workflows/nodes/data/citation-pages) ### Citation Rank The rank of a domain or page when cited sources are sorted by [Citation Share](/answer-engine-insights/interpret#citation-share-and-citation-coverage). A lower rank means the source is cited more often than its peers. For example, mcdonalds.com has the third-highest Citation Share among all cited domains. Its Citation Rank is 3. Learn more: [Interpret Answer Engine Insights (legacy)](/answer-engine-insights/interpret) ### Citation Share The percentage of all citations that point to a given domain, page, or citation category. For example, if your owned domains receive 100 citations out of 1,000 total, your Citation Share is 10%. Learn more: [Interpret Answer Engine Insights](/answer-engine-insights/interpret) ### Citation Share (Workflow node) A data node for [Workflows](/agents/workflows/about-workflows) that returns [Citation Share](/answer-engine-insights/interpret#citation-share-and-citation-coverage) values for use inside a Workflow. Learn more: [Citation Share Node](/agents/workflows/nodes/data/citation-share) ### Claim A statement an answer engine makes about your brand. [FactCheck](/answer-engine-insights/factcheck/about) extracts claims, checks them against your [Knowledge Base](/context-manager/knowledge-bases-and-brand-kits), and classifies each as accurate, inaccurate, or not relevant. Subjective statements are routed to [Sentiment](/answer-engine-insights/sentiment/about) instead. Learn more: [About FactCheck](/answer-engine-insights/factcheck/about) ### Client workspace A long-running brand [workspace](/agencies/agency-mode-overview) in [Agency Mode](/agencies/agency-mode-overview) for an agency's active clients. Client workspaces last for the duration of the agency's contract and are typically larger than [pitch workspaces](/agencies/agency-mode-overview), with more prompts, platforms, regions, and competitors tracked. Learn more: [Agency Mode overview](/agencies/agency-mode-overview) ### Command Center A Platform Management view that shows your team's Profound adoption, hours saved with Agents, and peer benchmarks. Learn more: [About Command Center](/platform-config/command-center/about) ### Competitor A brand you monitor alongside your own. Profound tracks competitors' presence in AI responses so you can compare Visibility Score, Share of Voice, Citation Share, and Sentiment. Learn more: [Answer Engine Insights settings](/answer-engine-insights/settings) ### Competitor prompt A prompt that asks which brand AI picks when the question narrows to a head-to-head comparison, for example: > "I'm looking for an email marketing platform with the best AI features. Would you recommend ActiveCampaign or HubSpot?" Learn more: [Six types of prompts in Profound's AEO guide](https://www.tryprofound.com/aeo-guide/chapter-3#six-types-of-prompts) ### Conditional Branching logic in a [Workflow](/agents/workflows/about-workflows). A conditional routes the workflow down different paths based on the value of a variable, for example publishing content only when a quality check passes. Learn more: [Add conditionals to Workflows](/agents/how-tos/add-conditionals-to-workflows) ### Connector A connection between Profound and a tool in your marketing stack, such as a CMS, analytics platform, or messaging app. Connectors, also called tools, are what [Agents](/agents/about) and AI Marketer use, while [integrations](/integrations/overview) are what [Workflows](/agents/workflows/about-workflows) use. Connectors also power the sources that [Context Manager](/context-manager/about) learns from. Learn more: [Integrations vs. connectors](/integrations/integrations-vs-connectors) ### Context Manager The one place for everything Profound knows about your brand: positioning, audience, strategy, and how you like to work. It stores that context as knowledge records, keeps Personal Context, and houses [Knowledge Bases](/context-manager/knowledge-bases-and-brand-kits) and [Brand Kits](/context-manager/knowledge-bases-and-brand-kits). [AI Marketer](/aim/about), [Agents](/agents/about), and [Projects](/projects/about) all draw on it. Learn more: [About Context Manager](/context-manager/about) ### Coverage topic A broad [topic](/getting-started/glossary#topic) that tracks whether your brand is part of the conversation for a category, such as "historical data". Compare [Depth topic](/getting-started/glossary#depth-topic), which targets a specific opportunity. ### Create Content Brief A content creation node for [Workflows](/agents/workflows/about-workflows) that drafts a content brief, typically from AEO data or research produced earlier in the workflow. Learn more: [Create Content Brief](/agents/workflows/nodes/content-creation/create-content-brief) ### Credits The unit Profound uses to measure AI work in your organization. Credits are consumed by [AI Marketer](/aim/about) conversations and by [Workflow](/agents/workflows/about-workflows) runs, whether stand-alone, on a schedule, from [Sheets](/sheets/getting-started), as a step in an [Agent](/agents/about), or through [Profound MCP](/mcp/overview). While Agents are in public beta, Agent runs don't use credits. Learn more: [Credits](/getting-started/credits) ### Custom Dashboards See [Dashboards](/getting-started/glossary#dashboards). Learn more: [About Dashboards](/custom-dashboards/about) ### Custom role A [role](/platform-config/people/roles-and-permissions) with a permission set you define, assigned to organization members in place of the built-in roles. Learn more: [Custom roles](/platform-config/people/custom-roles) ## D ### Dashboards Configurable views of your Profound data. Pick charts and tables for metrics such as Visibility Score, Share of Voice, and Citation Share, apply filters, arrange the layout, and share the dashboard with your organization or with a link. Learn more: [About Dashboards](/custom-dashboards/about) ### Depth topic A focused [topic](/getting-started/glossary#topic) built to win a specific opportunity, such as "historical data for marketers". It answers the question "are we the default recommendation?" Compare [Coverage topic](/getting-started/glossary#coverage-topic), which tracks a whole category. ### Discovery prompt A prompt that asks for a recommendation in your category without naming any brand, for example *"What are the best AEO tools for enterprise brands?"* Because nothing in the question points at your brand, discovery prompts give the cleanest read of which brands shape your category. Learn more: [Six types of prompts in Profound's AEO guide](https://www.tryprofound.com/aeo-guide/chapter-3#six-types-of-prompts) ### Domain The website behind a citation, such as example.com, as opposed to the specific page cited. Profound ranks domains in Top Citation Domains and assigns each to a citation category. Learn more: [Interpret Answer Engine Insights](/answer-engine-insights/interpret) ### Domain Segments Groupings of website data in [Agent Analytics](/agent-analytics/overview) by sub-brand, product line, or region. A segment can split one domain into slices or combine several domains into one view, so each team sees only its part of the site while leadership sees the brand-wide roll-up. Learn more: [About Agent Analytics](/agent-analytics/overview) ## E ### Earned Media The citation category for sites whose primary purpose is publishing content: news outlets, magazines, trade publications, editorial review sites, affiliate and comparison sites, and personal blogs. It excludes corporate blogs, newsrooms, and lead-generation sites. Learn more: [Interpret Answer Engine Insights](/answer-engine-insights/interpret) ### Entity Parser The component that extracts entities (companies, products, people, product features, or publication sources) from answer engine responses. Your Profound team configures it during onboarding. Learn more: [Answer Engine Insights settings](/answer-engine-insights/settings) ### Execution One run of a prompt against one platform. Learn more: [Create, manage, and tag prompts in Prompt Designer](/answer-engine-insights/prompt-designer) ## F ### FactCheck Profound's accuracy layer, part of [Answer Engine Insights](/answer-engine-insights/interpret). FactCheck extracts the claims answer engines make about your brand, checks each against your [Knowledge Base](/context-manager/knowledge-bases-and-brand-kits), clusters them by theme, and traces inaccurate claims back to the citation URLs driving them. Learn more: [About FactCheck](/answer-engine-insights/factcheck/about) ## G ### Generate Article A content creation node for [Workflows](/agents/workflows/about-workflows) that writes a full article from a brief, research, or instructions, optionally grounded in a [Knowledge Base](/context-manager/knowledge-bases-and-brand-kits) and styled with a [Brand Kit](/context-manager/knowledge-bases-and-brand-kits). Learn more: [Generate Article](/agents/workflows/nodes/content-creation/generate-article) ### Get Sitemap A node for [Workflows](/agents/workflows/about-workflows) that fetches a website's sitemap so you can iterate over its URLs. See also [Profound Sheets Sitemap Importer](/bots/sitemap-importer). Learn more: [Get Sitemap](/agents/workflows/nodes/get-sitemap) ### Google Ads integration A set of integration [nodes](/agents/workflows/about-workflows) that pull Google Ads data into [Workflows](/agents/workflows/about-workflows). Learn more: [Google Ads integration and nodes](/integrations/google-ads/overview) ## H ### Half-life In [Citation Decay](/answer-engine-insights/interpret#citation-decay), the number of days for a source's citations to fall to half of their peak and stay there. A short half-life means the page or domain lost ground quickly and is a candidate for a content refresh. Compare [Rise](/getting-started/glossary#rise). Learn more: [Interpret Answer Engine Insights](/answer-engine-insights/interpret) ### Human Review A node for [Workflows](/agents/workflows/about-workflows) that pauses the workflow until a person reviews and approves the content before later nodes run. Learn more: [Human Review](/agents/workflows/nodes/human-review) ## I ### Indexing In [Pages](/pages/about), submitting a page to search engines so they pick up new or updated content sooner. Profound uses the IndexNow protocol, which requests priority indexing but doesn't guarantee it. In [Agent Analytics](/agent-analytics/overview), AI indexing is one of the [bot](/agent-analytics/crawler-verification) traffic types. Learn more: [About Pages](/pages/about) ### Input Information you provide each time you start an Agent or a Workflow: text, Profound data, files, or dropdown selections. In [Sheets](/sheets/getting-started), each row supplies the inputs for one [Workflow run](/agents/workflows/workflow-runs). Learn more: [About Agents](/agents/about) ### Intent In [Prompt Volumes](/prompt-volumes/about), the reason behind a user's prompt: informational, commercial, generative, or conversational. Learn more: [About Prompt Volumes](/prompt-volumes/about) ### Iteration A loop in a [Workflow](/agents/workflows/about-workflows). An iteration applies the same sequence of nodes to every item in a list, for example extracting pricing from each competitor site in turn. Learn more: [Add iterations to Workflows](/agents/how-tos/add-iterations-to-workflows) ## K ### Keyword list A named collection of related keywords in [Prompt Volumes](/prompt-volumes/about) for tracking a topic cluster over time. Learn more: [Keyword searches and lists](/prompt-volumes/how-tos/keyword-searches-and-lists) ### Knowledge Base A repository of documents, web pages, and other source material that Profound treats as the source of truth about your brand. [Context Manager](/context-manager/about) distills Knowledge Bases into [knowledge records](/context-manager/about), [FactCheck](/answer-engine-insights/factcheck/about) verifies [claims](/answer-engine-insights/factcheck/about) against them, and a Knowledge Base node in [Workflows](/agents/workflows/about-workflows) runs a semantic search over them so generated content rests on verified material. Learn more: [Knowledge Bases and Brand Kits](/context-manager/knowledge-bases-and-brand-kits) ### Knowledge record A document in [Context Manager](/context-manager/about) that Profound generates and maintains about one part of your business: company, audience, competitors, offerings, strategy, or execution. Learn more: [About Context Manager](/context-manager/about) ## M ### Market perception prompt A prompt that asks how AI frames your category rather than your brand, for example *"What is a digital asset management platform and how should I evaluate one?"* It's useful for checking whether the way AI explains the space favors capabilities you have or capabilities your competitors lead on. Learn more: [Six types of prompts in Profound's AEO guide](https://www.tryprofound.com/aeo-guide/chapter-3#six-types-of-prompts) ### Mention A reference to a brand within an answer engine response. One response can mention the same brand several times. Learn more: [Answer Engine Insights settings](/answer-engine-insights/settings) ### Model See [platform](/getting-started/glossary#platform). ## N ### Name Matching The [Answer Engine Insights](/answer-engine-insights/interpret) setting that groups the different names answer engines use for a brand, such as "Profound" and "Try Profound," under one asset. Learn more: [Answer Engine Insights settings](/answer-engine-insights/settings) ### Network benchmarking A [Pages](/pages/about) feature that scores a page's citations as a percentile against roughly 3 million pages tracked across the Profound network, from Poor to Great. Benchmark against all sites or a peer group. Requires [Agent Analytics](/agent-analytics/overview). Learn more: [About Pages](/pages/about) ### Node One step in a [Workflow](/agents/workflows/about-workflows). Each node performs a specific task: prompting an AI model, fetching a page, querying Profound data, creating content, and so on. Learn more: [About Workflows](/agents/workflows/about-workflows), [Workflow nodes](/agents/workflows/about-workflows#workflow-components) ## O ### Organization Your company's space, where everything you do in Profound lives. An organization is a way to organize your Profound data and access: one Profound login can have several organizations, each with its own members and their [roles](/platform-config/people/roles-and-permissions), [teams](/getting-started/glossary#team), [credits](/getting-started/credits), [categories](/getting-started/glossary#category) and resources, such as Agents, Dashboards, Documents, and Knowledge Bases. Learn more: [How your Profound data and access are organized](/getting-started/organizations-and-teams) ## P ### Page A specific URL cited by an answer engine, as distinct from its domain. Learn more: [About Pages](/pages/about) ### Page Health A [Pages](/pages/about) feature that reports whether a page loads, renders, and performs well enough for users, crawlers, and answer engines. It draws on Google Lighthouse and PageSpeed Insights and covers core web performance metrics such as Largest Contentful Paint, Interaction to Next Paint, and Cumulative Layout Shift. Learn more: [About Pages](/pages/about) ### Pages The Profound product that shows how each of your web pages performs in AI search. Pages combines Citation Share and Citation Rank from [Answer Engine Insights](/answer-engine-insights/interpret) with bot visits and AI referrals from [Agent Analytics](/agent-analytics/overview), plus content scores, Page Health, Bot vs. Human Readable Content, Indexing, and network benchmarking, in one table. Learn more: [About Pages](/pages/about) ### Perplexity Search A node for [Workflows](/agents/workflows/about-workflows) that runs a live web search through Perplexity and returns the results for later nodes. Learn more: [Perplexity Search](/agents/workflows/nodes/perplexity-search) ### Persona An audience profile that Profound adopts when it runs a prompt, such as "small business owner" or "enterprise IT buyer." Learn more: [Personas in Answer Engine Insights](/answer-engine-insights/personas) ### Personal Context The part of [Context Manager](/context-manager/about) that keeps memories about how you work. Profound uses it to personalize your chats without mixing your preferences into the shared [Brand Context](/context-manager/about). Learn more: [About Context Manager](/context-manager/about) ### Pitch workspace A short-term brand workspace in [Agency Mode](/agencies/agency-mode-overview), used to assess a prospect's AI search visibility or prepare a pitch. Pitch workspaces expire after a defined period, typically 30 days. Learn more: [Agency Mode overview](/agencies/agency-mode-overview) ### Platform An answer engine that Profound tracks, such as ChatGPT, Gemini, Claude, Perplexity, or Google AI Overviews. Also called a model. ### Position Where your brand ranks relative to competitors. Position aggregates performance indicators such as Share of Voice into a ranked score; a lower value means a higher rank. See also [Average Position](/getting-started/glossary#average-position). Learn more: [About Answer Engine Insights](/answer-engine-insights/about) ### Product tile The card-style component that displays one product when an answer engine enters Shopping mode. A tile carries an image, price, merchant links, and buy buttons, and can expand to show sections such as "What to know." Learn more: [About Shopping](/shopping/about) ### Profound Documents A built-in collaborative editor for storing and refining content inside Profound. Documents support rich text, real-time co-editing, and comments. Also known as Profound Docs. Learn more: [Profound Documents](/documents/about) ### Profound Knowledge Base Fetcher A Profound bot that reads a website's sitemap when you import the site into a [Knowledge Base](/context-manager/manage-knowledge-bases), and re-checks imported PDF files for changes during auto-sync. Learn more: [Profound Knowledge Base Fetcher](/bots/knowledge-base-fetcher) ### Profound MCP Profound's hosted Model Context Protocol server, which lets AI tools such as ChatGPT, Claude, or Cursor access Profound data. Learn more: [Profound MCP overview](/mcp/overview) ### Profound Sheets Sitemap Importer A Profound bot that fetches a website's sitemap.xml and robots.txt so you can import the sitemap URLs into a [Sheet](/sheets/getting-started). Learn more: [Profound Sheets Sitemap Importer](/bots/sitemap-importer) ### ProfoundBot A Profound bot that fetches a single public web page on demand, so an [Agent](/agents/about) or [Sheet](/sheets/getting-started) can read its content as Markdown or HTML. Learn more: [ProfoundBot](/bots/profoundbot) ### Project One workspace in [Projects](/projects/about). A Project holds the chats, instructions, context, members, and Artifacts for one initiative, such as a product launch or a sentiment fix. Learn more: [About Projects](/projects/about) ### Projects The Profound feature for team work that spans more than one task. Each Project is a shared workspace with its own instructions, context (files, [Knowledge Base](/context-manager/knowledge-bases-and-brand-kits) documents, and brand information from [Context Manager](/context-manager/about)), chats with [AI Marketer](/aim/about), and Artifacts. AI Marketer suggests new Projects and tasks based on your data. See also [Suggestion](/getting-started/glossary#suggestion). Learn more: [About Projects](/projects/about) ### Prompt A query that Profound sends to answer engines on your behalf, such as "What is the best tool for answer engine analysis?" Prompts run once a day on each configured platform, and their responses form the dataset behind [Answer Engine Insights](/answer-engine-insights/interpret). Prompts belong to a topic, can carry tags, regions, and Personas, and are managed in the [Prompt Designer](/answer-engine-insights/prompt-designer). Learn more: [Create, manage, and tag prompts in Prompt Designer](/answer-engine-insights/prompt-designer) ### Prompt Designer The interface for creating, editing, tagging, and organizing prompts and topics. Open it from [Answer Engine Insights](/answer-engine-insights/interpret) > Prompts > **Modify Prompts**. Add prompts by bulk upload, with the Prompt Generator, or manually. Requires the [Admin](/platform-config/people/roles-and-permissions) role. Learn more: [Create, manage, and tag prompts in Prompt Designer](/answer-engine-insights/prompt-designer) ### Prompt Generator A tool in the [Prompt Designer](/answer-engine-insights/prompt-designer) that generates collections of prompts for your existing topics. You choose the topics, regions, languages, and platforms, and can add extra instructions. Learn more: [Create, manage, and tag prompts in Prompt Designer](/answer-engine-insights/prompt-designer) ### Prompt LLM The core node for [Workflows](/agents/workflows/about-workflows): it sends a prompt you write to an AI model and returns the response. Most content workflows chain several Prompt LLM nodes. Learn more: [Prompt LLM](/agents/workflows/nodes/prompt-llm) ### Prompt Research Reports Reports in [Prompt Volumes](/prompt-volumes/about) that compare what real users ask answer engines with what you track in [Answer Engine Insights](/answer-engine-insights/interpret), to surface gaps in your prompt coverage. Learn more: [About Prompt Volumes](/prompt-volumes/about) ### Prompt type See [Analysis type](/getting-started/glossary#analysis-type). ### Prompt Volume The projected demand for a prompt or topic, drawn from the [Prompt Volumes](/prompt-volumes/about) dataset. Learn more: [About Prompt Volumes](/prompt-volumes/about) ### Prompt Volumes Profound's dataset of real prompts that users submit to answer engines. Data comes from ChatGPT, Gemini, Claude, and Perplexity and is anonymized and aggregated. Learn more: [About Prompt Volumes](/prompt-volumes/about) ## Q ### Query fanout A search query an answer engine generates behind the scenes while answering a prompt. Learn more: [Interpret Answer Engine Insights](/answer-engine-insights/interpret) ### Query Fanout Estimator A content optimization node and template for [Workflows](/agents/workflows/about-workflows) that estimates how a topic expands into related query fanouts, so content can cover them. Learn more: [Query Fanout Estimator](/agents/workflows/nodes/content-optimization/query-fanout-estimator) ### Query fanouts A view in the Prompts tab of [Answer Engine Insights](/answer-engine-insights/interpret) that lists the queries answer engines generate from each prompt you track. Learn more: [Interpret Answer Engine Insights](/answer-engine-insights/interpret) ## R ### Region The country a prompt is scoped to when Profound runs it. Learn more: [Interpret Answer Engine Insights](/answer-engine-insights/interpret) ### Research Snippets Generator A research node for [Workflows](/agents/workflows/about-workflows) that produces short research snippets on a topic for use in briefs or articles. Learn more: [Research Snippets Generator](/agents/workflows/nodes/research/research-snippets-generator) ### Response The answer an answer engine returns for one execution of a prompt. Profound analyzes each response for brand mentions, citations, sentiment, and claims. Learn more: [About Answer Engine Insights](/answer-engine-insights/about) ### Rise In Citation Decay, the number of days from a source's first citation to its peak citation count. The summary shows the Average Rise across all sources. Compare [Half-life](/getting-started/glossary#half-life). Learn more: [Interpret Answer Engine Insights](/answer-engine-insights/interpret) ### Role The permission level of a member in your [organization](/getting-started/organizations-and-teams). Roles control who can modify prompts, manage settings, and see credit usage. You can use pre-defined roles, such as Admin or Member, or define a [custom role](/platform-config/people/custom-roles) with a custom set of permissions. Learn more: [Roles and permissions](/platform-config/people/roles-and-permissions) ## S ### Saved Views A stored combination of date range, comparison period, and filters in [Answer Engine Insights](/answer-engine-insights/interpret) or [Pages](/pages/about). Learn more: [Interpret Answer Engine Insights](/answer-engine-insights/interpret) ### Sentiment The part of [Answer Engine Insights](/answer-engine-insights/interpret) that tracks the tone and content of how answer engines describe your brand. Sentiment extracts claims from responses, clusters them into themes and attributes with positive or negative polarity, shows the exact text behind each signal, and attributes signals to the citations driving them. Learn more: [About Sentiment](/answer-engine-insights/sentiment/about) ### Sentiment (node) A data node for [Workflows](/agents/workflows/about-workflows) that returns positive or negative sentiment scores from current Sentiment data for use inside a Workflow. Learn more: [Sentiment node](/agents/workflows/nodes/data/sentiment) ### Sentiment Score The share of positive sentiment for a brand, averaged across tracked [platforms](/answer-engine-insights/interpret). Claims are weighted by [mention](/answer-engine-insights/settings) frequency, so a theme that appears more frequently carries more weight. For example, 75 positive and 25 negative mentions give a Sentiment Score of 75%. Learn more: [About Sentiment](/answer-engine-insights/sentiment/about) ### Sentiment Score (node) A data node for [Workflows](/agents/workflows/about-workflows) that returns Sentiment Score values for use inside a workflow. Learn more: [Sentiment Score Node](/agents/workflows/nodes/data/sentiment-score) ### Share of Voice How often your brand is mentioned compared with all brands. Share of Voice divides the number of responses that mention your brand by the total number of brand mentions across all responses. For example, 20 mentions out of 100 total brand mentions gives a Share of Voice of 20%. Compare [Visibility Score](/getting-started/glossary#visibility-score). Learn more: [About Answer Engine Insights](/answer-engine-insights/about) ### Share of Voice Rank Your brand's rank by Share of Voice relative to competitors for a prompt or topic. Shown in the rank list beside the Share of Voice chart and as a column in the Tracked prompts table. Learn more: [Interpret Answer Engine Insights](/answer-engine-insights/interpret) ### Sheets The Profound product for running [Workflows](/agents/workflows/about-workflows) at scale. A Sheet is a spreadsheet where each row is an input (a page, topic, keyword, or prompt) and each column is a data field, a Workflow step, or an output. Rows run in parallel, and outputs write back into the table. Learn more: [Get started with Sheets](/sheets/getting-started) ### Sheets Templates Ready-made [Sheet](/sheets/getting-started) starting points for common workflows, such as Article Translator, Content Refresher, FAQ Generator, and Internal Link Suggestions. Each comes pre-loaded with the right [Workflow](/agents/workflows/about-workflows), columns, and sample data. Learn more: [Get started with Sheets](/sheets/getting-started) ### Shopping The Profound product that shows how your products appear inside AI shopping experiences. Learn more: [About Shopping](/shopping/about) ### Shopping mode The state an AI chat enters when a prompt signals purchase intent. Instead of a text answer, the answer engine returns a carousel of product tiles. Learn more: [About Shopping](/shopping/about) ### Shopping Mode Rate The percentage of your tracked prompts that trigger Shopping mode rather than a standard text answer. Learn more: [About Shopping](/shopping/about) ### Shopping Visibility Score How consistently your brand and products appear across Shopping mode responses. A score of 100% means your brand appears every time the answer engine enters shopping mode for that prompt set. Review it by topic, because scores can swing between topics for the same brand. Learn more: [About Shopping](/shopping/about) ### Strongholds The Topic Prioritization group for topics with high Visibility Score and high Citation Share. Learn more: [Interpret Answer Engine Insights](/answer-engine-insights/interpret) ### Suggestion A new Project or task that [AI Marketer](/aim/about) suggests based on your data and context. Project suggestions appear at the top of the **Projects** page, and task suggestions appear in the **Suggestions for you** panel of a Project. Select **Start task** on a Suggestion to open a chat where AI Marketer starts on the plan with you. If a Suggestion fits one of your existing [Agents](/agents/about), AI Marketer can use it. Learn more: [About Projects](/projects/about) ## T ### Tag A free-form label you apply to a prompt as a second layer of organization beyond topics. Learn more: [Create, manage, and tag prompts in Prompt Designer](/answer-engine-insights/prompt-designer) ### Team A named group of members inside your [organization](/getting-started/glossary#organization). Assign categories to a team to give every member access to them at once, share Dashboards, Documents, Sheets, Agents, Workflows, and other resources with the whole team, and give the team its own [credit](/getting-started/glossary#credits) wallet. Learn more: [How teams work in Profound](/platform-config/people/teams/overview), [How your Profound data and access are organized](/getting-started/organizations-and-teams) ### Template A pre-built [Agent](/agents/about), [Workflow](/agents/workflows/about-workflows), or [Sheet](/sheets/getting-started) for a common use case, such as AEO Content Refresh or FAQ Generator. Learn more: [About Agents](/agents/about) ### Theme A neutral, high-level topic area that answer engines associate with a brand, such as Customer Support or Pricing. In [Sentiment](/answer-engine-insights/sentiment/about), themes group attributes with positive or negative polarity; in [FactCheck](/answer-engine-insights/factcheck/about), themes cluster similar claims. Learn more: [About Sentiment](/answer-engine-insights/sentiment/about), [About FactCheck](/answer-engine-insights/factcheck/about) ### Top Citation Domains A ranked list of the [domains](/answer-engine-insights/interpret) most frequently cited in AI responses. Learn more: [Interpret Answer Engine Insights](/answer-engine-insights/interpret) ### Top Citation Pages A ranked list of the pages most frequently cited in AI responses. Several pages from the same domain can appear. Learn more: [Interpret Answer Engine Insights](/answer-engine-insights/interpret) ### Topic A group of related prompts organized around a common theme, product, or business objective, such as "Pricing" or "Integrations." Topics structure your prompt set and are the main way to compare performance across areas of your business. Create topics in the [Prompt Designer](/answer-engine-insights/prompt-designer). Learn more: [How to create topics and prompts to track in Profound](/answer-engine-insights/how-tos/create-topics-and-prompts) ## V ### Validation prompt A yes-or-no prompt that checks whether AI knows your brand has a specific capability, for example *"Does Profound offer prompt volume tracking?"* Learn more: [Six types of prompts in Profound's AEO guide](https://www.tryprofound.com/aeo-guide/chapter-3#six-types-of-prompts) ### Variable A piece of data that flows in or out of a [Workflow](/agents/workflows/about-workflows) node. Variables pass between steps and can be reused anywhere later in the Workflow. Learn more: [About Workflows](/agents/workflows/about-workflows) ### Visibility Whether your brand appears in an answer engine response. Measured by [Answer Engine Insights](/answer-engine-insights/interpret). Related metrics: Visibility Score, Share of Voice, Average Position. Learn more: [Interpret Answer Engine Insights](/answer-engine-insights/interpret) ### Visibility Rank Your brand's rank by Visibility Score relative to competitors for a prompt or topic. Compare [Share of Voice Rank](/getting-started/glossary#share-of-voice-rank). Learn more: [Interpret Answer Engine Insights](/answer-engine-insights/interpret) ### Visibility Score The percentage of responses that mention your brand, out of all responses that mention at least one brand. For example, appearing in 5 out of 10 responses gives a Visibility Score of 50%. It's the headline metric in [Answer Engine Insights](/answer-engine-insights/interpret). Compare [Share of Voice](/getting-started/glossary#share-of-voice), which counts mentions rather than responses. Learn more: [About Answer Engine Insights](/answer-engine-insights/about) ### Visibility Score (node) A data node for [Workflows](/agents/workflows/about-workflows) that returns Visibility Score values for a brand, topic, or prompt set for use inside a Workflow. Learn more: [Visibility Score](/agents/workflows/nodes/data/visibility-score) ## W ### Watchlist The view of the All Citations table in [Answer Engine Insights](/answer-engine-insights/interpret) that monitors a custom set of pages you define, rather than the most cited pages overall. Learn more: [Interpret Answer Engine Insights](/answer-engine-insights/interpret) ### Web Page Scrape A node for [Workflows](/agents/workflows/about-workflows) that fetches the content of a web page so later Workflow steps can analyze or rewrite it. Uses [ProfoundBot](/bots/profoundbot). Learn more: [Web Page Scrape](/agents/workflows/nodes/web-page-scrape) ### Whitelist A mode in [Configure Competitors](/answer-engine-insights/settings#configure-competitors) that shows only the brands on your list and excludes any response that mentions none of them. Compare [Blacklist](/getting-started/glossary#blacklist). Learn more: [Answer Engine Insights settings](/answer-engine-insights/settings) ### Workflow A node-based automation you build yourself in the [Workflow Builder](/getting-started/glossary#workflow-builder). Each node does one job, such as querying Profound data, prompting an AI model, fetching a web page, or publishing to a CMS, and data moves between nodes as variables. Every run follows the same path, so the output has the same structure each time. Run a Workflow on demand, on a schedule, across many inputs from [Sheets](/sheets/getting-started), as a step inside an [Agent](/getting-started/glossary#agent), or through the Profound API and [Profound MCP](/mcp/overview). Workflow runs consume [credits](/getting-started/credits). Learn more: [About Workflows](/agents/workflows/about-workflows) ### Workflow Builder The canvas where you assemble a [Workflow](/getting-started/glossary#workflow): add nodes, connect them, define the inputs, and run tests to check what each node returns and what the run is expected to cost in [credits](/getting-started/credits) before you publish. Learn more: [Create a Workflow](/agents/workflows/create-workflow) ### Workflow output What a [Workflow](/getting-started/glossary#workflow) returns when its last node finishes: generated content, a published article, a Slack message, a [Profound Document](/documents/about), or a confirmation that the run succeeded. In [Sheets](/sheets/getting-started), the output lands in the row that supplied the input. Learn more: [About Workflows](/agents/workflows/about-workflows) ### Workflow run One execution of a [Workflow](/getting-started/glossary#workflow), from the moment its inputs are submitted to its final output. Runs are independent of each other: each has its own status, result, and [credit](/getting-started/credits) cost, and the same Workflow can return different results for different inputs. Test runs in the Workflow Builder also show the variables each node produced. Review earlier runs from the Workflow's **Past runs** view. Learn more: [Workflow runs](/agents/workflows/workflow-runs) ### Workspace An isolated brand environment in Agency Mode with its own prompts, competitors, tracked platforms, and configuration. Learn more: [Agency Mode overview](/agencies/agency-mode-overview) ## Y ### YouTube Title & Description A node for [Workflows](/agents/workflows/about-workflows) that fetches the title and description of a YouTube video for use in a content workflow. Learn more: [YouTube Title & Description](/agents/workflows/nodes/youtube-title-description) ### YouTube Video Transcript A node for [Workflows](/agents/workflows/about-workflows) that fetches a YouTube video's transcript so later nodes can turn it into written content. Learn more: [YouTube Video Transcript](/agents/workflows/nodes/youtube-video-transcript) # How your Profound data and access are organized Source: https://docs.tryprofound.com/getting-started/organizations-and-teams Learn how organizations, teams, and categories fit together in Profound, and when to use teams or separate organizations > [!TIP] > > Find definitions of unfamiliar terms and concepts in the [Profound glossary](/getting-started/glossary). Everything you do in Profound lives in an **organization**: your categories, members, credits, and resources, such as Agents, Dashboards, or Knowledge Bases. Inside an organization, **teams** group people who work together, so you can give the whole group access to the same categories and resources at once. ## Organizations An organization is your company's space in Profound. It holds your data, your members and their [roles](/platform-config/people/roles-and-permissions), and your [credits](/getting-started/credits). ### What data belongs to an organization Some data belongs to the organization as a whole, and some belongs to a single [category](/getting-started/categories) inside it. **Organization-wide** data is available across all your categories: * [Agents](/agents/about) and [Workflows](/agents/workflows/about-workflows) * [Sheets](/sheets/getting-started) * [Documents](/documents/about) * [Dashboards](/custom-dashboards/about) * [Projects](/projects/about) * [AI Marketer (Aim)](/aim/about) chats * [Integrations](/integrations/overview) * [Agent Analytics](/agent-analytics/overview) data * [Context](/context-manager/about): Brand context, [Knowledge Bases](/context-manager/knowledge-bases-and-brand-kits), and Skills. You can [limit a Knowledge Base to specific categories](/context-manager/manage-knowledge-bases#choose-which-categories-a-knowledge-base-applies-to). This data is scoped to your organization, but that doesn't mean that all members can see it by default. Resources such as Dashboards, Documents, Projects, Sheets, Aim chats, Agents, and Workflows stay private to the person who created them until they're shared with people, teams, or the whole organization. **Category-specific** data is available only inside the selected category: * Everything inside [Answer Engine Insights](/answer-engine-insights/about): prompts, topics, tags, assets, Personas, competitors, and so on * [Prompt Volumes](/prompt-volumes/about) * [Sentiment](/answer-engine-insights/sentiment/about) * [Shopping](/shopping/about) * [Pages](/pages/about) Learn more in [Categories in Profound](/getting-started/categories). ### Creating an organization Profound creates an organization in one of the following ways: * **With a Profound contract**: when your company buys Profound through the sales team, Profound sets up the organization for you. * **With a sign-up on the Profound website**: when you create an account yourself, Profound creates a new organization on a trial plan during onboarding and makes you its admin. To join an organization that already exists, ask an [admin](/platform-config/people/roles-and-permissions) to invite you. If your company uses [Directory Sync](/platform-config/people/directory-sync), your identity provider adds you automatically. ## Teams A team is a named group of members inside your organization. Teams solve a common problem for larger companies: different groups work on different brands, markets, or clients, and each group needs access to its own categories and resources. Without teams, an admin grants that access to one person at a time. With teams, you grant it once to the team, and everyone in it gets the same access. Learn more in [How teams work in Profound](/platform-config/people/teams/overview). ### What data belongs to a team A team doesn't own data: the data belongs to the organization, and the team controls who can reach it. Each team has: * **Members**: the people in the team. * **Categories** (optional): the categories every member of the team can access. * **Shared resources** (optional): Dashboards, Documents, Sheets, Agents, Workflows, and other resources shared with the team. * **Team wallet** (optional): [credits](/getting-started/credits) reserved for the team's use. Learn more in [Team wallets](/platform-config/people/teams/overview#team-wallets). ## How organizations, teams, and categories relate * A team belongs to one organization, and only members of that organization can join it. * A member can belong to several teams. * A team can access only categories your organization uses, including categories [shared with it by another organization](/getting-started/categories#when-you-have-multiple-organizations-and-categories). * Team access adds to the access a member already has. Members keep the categories granted to them individually on the [People page](/platform-config/people/add-and-manage-org-members#add-a-member), plus everything their teams grant. * When you remove a member from a team, they lose the categories and shared resources they had through that team. Anything granted to them directly or through another team stays. If they were spending from the team's wallet, they go back to spending from the organization's wallet. ## Multiple organizations and teams Teams and organizations both split your company into groups. You can keep all of your Profound data in one organization split into teams, or have multiple organizations, each with its own data. The difference between the two approaches is how complete you want the split to be. ### When to use teams Use teams when groups need to work separately but stay connected under one set of admins. With teams: * **Admins oversee every group.** Organization admins manage all teams in one place and can see every member. * **Groups can still work together.** A member can belong to several teams, and anyone can share organization-wide resources (such as Projects, Documents, or Agents) with another team, without switching organizations. * **Reporting is unified.** Dashboards can combine data from every team's categories, so leadership sees the whole business in one place. **Example use case**: a company with "EMEA Marketing" and "North America Marketing" teams, each with its own categories and budget, and a central marketing operations admin who oversees both. ### When to use multiple organizations Use separate organizations only when groups need full separation, including different admins. With separate organizations: * **Each organization has its own admins and members.** No one can see an organization's data unless they're a member of it, so an admin of one organization can't see the members of another. * **Members switch between organizations manually** with the organization selector to work in each one. * **Reporting stays separate.** Dashboards and other reports can't combine data across organizations. **Example use case**: a holding company whose subsidiaries run as independent businesses. Each subsidiary's marketing team manages its own Profound setup, and no one at the parent company or at another subsidiary should have admin access to it. ### How multiple organizations and teams relate * A team belongs to one organization. It can't include members or categories from another organization. * One Profound login can belong to several organizations. Your role and teams in one organization don't carry over to another. * An organization can share categories with other organizations. The receiving organization can use a shared category and give its own teams access to it, but only the owning organization can edit it. # Profound platform walkthrough: see how it works Source: https://docs.tryprofound.com/getting-started/platform-walkthrough A video walkthrough of how to understand and control how your brand shows up in AI search > [!NOTE] > > The video below shows the legacy Answer Engine Insights design. Learn more about the current features in [Interpret Answer Engine Insights](/answer-engine-insights/interpret). [https://player.mux.com/WKUPfYhw1Fl02PkcqGCMYASxkDnIP8bysjl6FI5CrbwI?\&accent-color=%23000000\&primary-color=%23ffffff\&default-hidden-captions=true\&thumbnail-time=146](https://player.mux.com/WKUPfYhw1Fl02PkcqGCMYASxkDnIP8bysjl6FI5CrbwI?\&accent-color=%23000000\&primary-color=%23ffffff\&default-hidden-captions=true\&thumbnail-time=146) This walkthrough covers everything you need to start understanding and controlling how your brand shows up in AI Search. You'll see: * **Prompt monitoring:** what questions people are asking that surface your brand (or your competitors') * **Answer engine visibility:** how Profound tracks your brand's presence, share of voice, and sentiment across AI-generated answers * **Citation Tracking:** where your content is being pulled from (or missed) when AI models generate responses * **Competitive Benchmarking:** how you stack up against competitors in AI Search visibility * **Actionable Recommendations using Agents:** where to focus content and optimization efforts for maximum AI engine optimization (AEO) impact using agentic workflows Whether you're new to AI Search optimization or looking to get more out of your Profound account, this walkthrough will help you navigate the platform with confidence and turn insights into action. # Profound Knowledge Base Source: https://docs.tryprofound.com/index Guides, references, and recipes for using Profound and building on its data # Profound Knowledge Base Guides, references, and recipes for using Profound and building on its data > **[Analyze your AI search presence](/getting-started/glossary)** > > Answer Engine Insights, Prompt Volumes, dashboards, and the basics to get started > **[Get the work done with AI Marketer (Aim) and Agents](/aim/about)** > > Your AI marketing teammate, Projects, Agents, Sheets, and the brand context behind them > **[Set up your organization](/platform-config/authentication/configure-sso)** > > Authentication, Activity Logs, Analytics Setup, team access, and agency mode > **[Connect your tools](/integrations/overview)** > > Integrations and connectors that make your CMS, analytics, and messaging tools available to Agents and Aim > **[Build with the API and SDKs](/rest-api/introduction)** > > Pull Profound data into your own applications, reports, and pipelines > **[Work with Profound from AI tools](/mcp/overview)** > > Give ChatGPT, Copilot, and coding assistants access to your Profound data through MCP > **[Follow reporting recipes](/cookbook/introduction)** > > Ready-made API queries for visibility, citations, and metrics ## More ways to learn > **[Blog](https://www.tryprofound.com/blog)** > > Product news and perspectives on AI search > **[Community](https://community.tryprofound.com)** > > Meet other Profound users, swap tips, and ask questions > **[Profound University](https://university.tryprofound.com)** > > Courses and resources to build your expertise > **[Research hub](https://www.tryprofound.com/research)** > > Studies and insights on AI search from the Profound team > **[The Marketing Engineer Podcast](https://www.tryprofound.com/podcasts)** > > Conversations with the people shaping marketing in the AI era > **[Webinars](https://www.tryprofound.com/webinars)** > > Live and recorded sessions on the platform and AI search strategy > **[White papers](https://www.tryprofound.com/reports-guides)** > > In-depth reports and guides on AI search ## Need help? > **[Status](https://status.tryprofound.com)** > > Check service health and current incidents > **[Contact support](mailto:support@tryprofound.com)** > > Reach the Profound team for help with your account or setup # About Pages Source: https://docs.tryprofound.com/pages/about How Pages shows the performance of your content across AI search > [!NOTE] > > **Available on:** all plans > > **Find it in:** Analytics > Pages Pages gives you a clear view of how your content performs in AI search. It brings everything you need from [Answer Engine Insights](/answer-engine-insights/about) and [Agent Analytics](/agent-analytics/overview) into one place to track the performance of your web pages. See how each page performs right now and how it's trending over time, all in a single view. ![Pages table for tryprofound.com with Category, Citation Share, Citation Rank, AI Citations, and AI Indexing columns](https://mintcdn.com/profound-37face47/d3tYUJ4mfdayQ4Zm/images/pages/about-1.png?fit=max\&auto=format\&n=d3tYUJ4mfdayQ4Zm\&q=85\&s=d9f9b488b5e4bf5408de748b0bd8b220) ## One view for how your content performs Your content is the primary way you influence how your brand appears in answer engines. Until now, getting a clear picture of how it performs involved too many steps: the story for any one page was split between [Answer Engine Insights](/answer-engine-insights/about) and [Agent Analytics](/agent-analytics/overview). Even without Agent Analytics, digging into citation data in Answer Engine Insights takes several clicks and a clear idea of what you're looking for. That's a lot of effort to answer a basic question: is this content working? Pages brings it all together. It centralizes the data Profound has about each piece of owned content: citation share from Answer Engine Insights, bot visits and benchmarks from Agent Analytics, Page Health, Bot vs. Human Readable Content, and content scores. From one place, see what content drives impact, spot opportunities to improve, and follow trends over time. ## Working with Pages Pages works for every customer, but what you see depends on whether Agent Analytics is configured for your account. ### Without Agent Analytics You get Pages with your [Answer Engine Insights](/answer-engine-insights/about) citation data, content scores, and AEO readiness scoring. Page Health, Bot vs. Human Readable Content, and Indexing are available too, so you can crawl your content, score how ready it is for answer engines, submit updates for indexing, and export rows. This removes a major activation blocker: act on your content right away, before any content delivery network (CDN) setup is complete. ### With Agent Analytics Adding [Agent Analytics](/agent-analytics/overview) layers in live bot and referral activity from your server logs: AI citation bot traffic, AI indexing, AI training, AI agent visits, and human referrals, along with per-page benchmarks. This gives you the complete view of how AI systems both cite and crawl each page. ## Key features ### Unified page-level analytics dashboard A single table lists every page with its key metrics in one row, combining citation data from Answer Engine Insights with live bot and referral data from Agent Analytics. The overview ranks pages by **citation share** and enriches them with bot visits (**AI citation** traffic, **AI indexing**, **AI training**, and **AI agent visits**), **human referrals**, tags, and category context. It's the fastest way to find the pages driving your visibility. ### Citations breakdown See exactly where and why a page is cited. Pages breaks a page's citations down by prompt, topic, tag, platform, region, persona, and even text chunks, each with citation share and citation rank, so you can tell which queries and audiences the page is winning. ### Content analysis and recommendations The **Content** tab analyzes a page's content and scores how ready it is for answer engines, with an overall score and a target zone. The score breaks down into factors like readability, content freshness, content structure, information density, and machine readability, and Pages turns each into specific optimization recommendations with the projected score impact of the change. ### Network benchmarking Your Page Ranking shows how a page's citations compare against roughly 3 million pages tracked across the Profound Network, scored from Poor to Great as a percentile. Benchmark against all sites or narrow to a peer group, so a raw number becomes a clear sense of how the page stacks up. This feature requires Agent Analytics. ### Page Health Page Health tells you whether your best content can load, render, and perform well enough for users, crawlers, and answer experiences to use it. It's an SEO-focused performance read on each page, sourced from Google Lighthouse and PageSpeed Insights. It covers core web performance metrics such as Largest Contentful Paint, Interaction to Next Paint, and Cumulative Layout Shift. ### Bot vs. Human Readable Content See the difference between what a person sees on a page and what an AI bot can access. Content rendered with client-side JavaScript often isn't visible to bots, so a page that looks complete to you can appear nearly empty to an answer engine. Pages flags the specific text blocks and headings hidden this way and recommends how to make them visible, so AI systems can find and cite the content that matters. ### Indexing Submit a page for indexing directly from Pages to prompt search engines to pick up new or updated content sooner. Indexing uses [IndexNow,](https://www.indexnow.org/index) a protocol to request priority indexing across subscribing search engines. The protocol doesn't guarantee priority indexing. If the request is accepted, indexing can take a few days for large enterprises and up to a few weeks for smaller sites. # Pages FAQ Source: https://docs.tryprofound.com/pages/faq Frequently asked questions about Pages > **Do I need Agent Analytics to use Pages?** > > No. Agent Analytics is only needed for live bot and referral activity. Without it, Pages still shows your Answer Engine Insights citation data, runs Page Health, Bot vs. Human Readable Content view, supports submission for indexing, crawls your content, scores AEO readiness, and lets you export. > **Why does a page show bot activity, but no citation data?** > > The two measure different things, so a gap is expected. Citation share in [Answer Engine Insights](/answer-engine-insights/about) comes from the prompts Profound runs through answer engines, while [Agent Analytics](/agent-analytics/overview) records real visits from AI bots crawling your site. Some reasons that explain the mismatch: > > * Answer Engine Insights tracks some engines that Agent Analytics doesn't > * Your tracked prompts may not match how people actually search, which skews cited pages toward your prompts rather than real-world usage > * Answer engines often reuse a cached copy of a page instead of fetching it fresh, so a citation can show up with no matching bot visit > **Why are the Agent Analytics data columns hidden or locked?** > > Agent Analytics must be set up for the columns (like Bot Visits, AI indexing, and so on) to appear in the Pages dashboard. Once Agent Analytics is set up for the domain, the columns appear. > **What is the AEO readiness score for?** > > It shows how prepared a specific page is for answer engine performance and gives your content team concrete recommendations to act on. Use it to decide what to improve on a page, and in what order. > **Why doesn't the Agent Analytics data in Pages match the Agent Analytics tab?** > > The two use slightly different date ranges. Answer Engine Insights data is always one day behind, so Pages shows Agent Analytics data on that same one-day-delayed range to keep everything in one view aligned. The Agent Analytics tab updates in real time (the last 7 days up to now), so for the same window its numbers can differ from what you see in Pages. # Get started with Pages Source: https://docs.tryprofound.com/pages/getting-started Open Pages, review your content, and act on page-level insights ## Step 1: Open Pages Log in to the Profound platform and open **Pages** from the left sidebar. ## Step 2: Choose your domain and date range Select the domain you want to review, then set the date range and comparison period at the top of the view, for example, Last 7 Days versus the previous period. ![A screenshot of the Pages view with the date range filter highlighted](https://mintcdn.com/profound-37face47/d3tYUJ4mfdayQ4Zm/images/pages/getting-started-1.png?fit=max\&auto=format\&n=d3tYUJ4mfdayQ4Zm\&q=85\&s=2824c02ce6feefec4f823128dcaf00ea) ## Step 3: Find your top pages Pages lists every page with its metrics in one row. Sort by **Citation Share** to see which pages answer engines reference most, use the **Customize** option to choose which columns appear in the dashboard, or use Group by to roll pages up by category. ## Step 4: Open a page to see its analytics Click any page to open its detailed view. The **Analytics** tab shows the citation share trend, AI bot activity by platform, what information on the page is accessible to bots, how the page ranks against the Profound Network, and a breakdown of where the page is cited by prompt, topic, platform, and more. ![A Page view screenshot with Analytics tab highlighted](https://mintcdn.com/profound-37face47/d3tYUJ4mfdayQ4Zm/images/pages/getting-started-2.png?fit=max\&auto=format\&n=d3tYUJ4mfdayQ4Zm\&q=85\&s=e77d62f5d44e4195526f9fdef413f10f) ## Step 5: Review and improve content Switch to the **Content** tab to see the page's content score and optimization recommendations. Work through the suggested content fixes. Select **Index page** in the top right of the view to submit updated content for faster indexing. ![Page detail with the Content tab and Index page button highlighted, Overall Score gauge shown](https://mintcdn.com/profound-37face47/d3tYUJ4mfdayQ4Zm/images/pages/getting-started-3.png?fit=max\&auto=format\&n=d3tYUJ4mfdayQ4Zm\&q=85\&s=a0c7e508cb23c61d078755ae0dc41f04) ## Step 6: Connect Agent Analytics for the full picture To add live bot and referral activity, AI agent visits, and per-page benchmarks, set up Agent Analytics through your CDN or server-level integration. > [!TIP] > > Learn more about setting up Agent Analytics in the [Agent Analytics](/agent-analytics/self-serve-onboarding) section. # Consent and privacy Source: https://docs.tryprofound.com/pixel/consent-and-privacy How Profound Pixel handles consent, which cookies it writes, and what data it collects > [!NOTE] > > This page is a factual description of the pixel's behavior. It is not legal advice, and it makes no recommendation about what your policies, notices, or agreements should say. Those are decisions for your own counsel. ## Consent handling The way Profound Pixel handles consent depends on whether your website uses a consent management platform (CMP). On sites with a CMP, the pixel reads the consent signal the CMP emits. On sites without one, it follows the consent posture set in your snippet. Either way, the pixel doesn't ask your visitors for consent and adds no cookie banner of its own to your site. ### The consent signal Whatever its source, the consent signal the pixel reads consists of the following three permissions: | Permission | Controls | When denied | | - | - | - | | Storage | Reading and writing Profound's cookies, the only browser storage the pixel uses | No cookies are read or written; the pixel works from memory only | | Send | Whether events may leave the browser | Events wait in memory (up to 100; the oldest are dropped past that); nothing is sent | | Ad-platform sharing | Any future forwarding of conversions to an ad platform | Nothing is shared. No forwarding exists today | These permissions are independent, and none of them implies another. For example, consent to cookie storage alone never allows ad-platform sharing or sending out events. ### Sites with CMP If your site uses a CMP, it handles consent for you: it emits the consent signal that Profound Pixel detects and follows. The recognized standards and vendors include: | Standard or vendor | Detected via | Notes | | - | - | - | | IAB TCF v2.2 (OneTrust, Cookiebot, Sourcepoint, Didomi, and others) | `__tcfapi` | - | | Google Consent Mode v2 | `ad_storage`, `analytics_storage`, `ad_user_data`, `ad_personalization` | - | | OneTrust, Cookiebot, Osano, TrustArc, vanilla-cookieconsent | Built-in support for each vendor's consent categories | - | | US Privacy / GPP | `__uspapi`, `__gpp` | - | | Global Privacy Control, Do Not Track | Browser signals | Both always turn off ad-platform sharing and, under the opt-out posture, also stop events from being sent. Neither affects storage: cookies are still written | #### If your CMP isn't detected If your CMP isn't recognized, or if you built your own consent banner, you'll need to map your consent categories to the [permissions](#the-consent-signal) Profound Pixel can read. Call `pfq('consent', …)` from your CMP's change handler, and pass it the permissions map: ```javascript theme={null} pfq('consent', { storage: true, send: true, share_ads: false }); ``` Permissions you leave out keep their default values: denied in the EU/UK, or defined in your [consent posture](#sites-without-cmp) in other regions. ### Sites without CMP #### Consent posture If your site doesn't use a CMP, you have to explicitly set your consent posture when you initialize your Profound Pixel. The options are: * **Opt-in (default)**: all three consent permissions start denied until a consent signal grants them. This is the best setting for EU/UK traffic. * **Opt-out**: the permissions start granted until a signal denies them, with Global Privacy Control honored. This is the usual setting for US-based traffic. Set it with `pfq("init", "", { posture: "opt-out" })`. Learn more in the [pixel installation guide](/pixel/install). #### Timezone check When reading the consent signal, the pixel also checks the browser's timezone. A visitor who appears to be in a European timezone is treated as opt-in even under the opt-out posture. Profound applies this check to comply with European data protection regulations. The check covers more than the EU region: any `Europe/*` timezone counts, including cities outside the EU, such as Istanbul, Belgrade, and Kyiv, plus several Atlantic islands. If your pixel is scoped to a single non-EU region, or your local data protection regulations otherwise allow the opt-out posture, you can disable the timezone check by adding `detectRegion: false` to the `pfq('init', ...)` call in your install snippet: ```javascript theme={null} pfq("init", "", { detectRegion: false }); ``` > [!WARNING] > > Always review your local data protection laws before disabling the timezone check. ### Consent withdrawal When a visitor withdraws consent, the changes take effect immediately: the pixel deletes its cookies and clears its memory. The visitor also gets a new random visitor ID, so granting consent again later can't restore the old ID. ## Cookies Profound Pixel writes the following cookies into the site visitor's browser storage: | Name | Purpose | Lifetime (set by Profound) | | - | - | - | | `_pf_id` | Random visitor ID, first and last acquisition source, and ad attribution data | 365 days | | `_pf_clk` | Ad and click identifiers | 90 days | > [!NOTE] > > Some browsers cap the lifetime of script-written cookies below the set lifetime values. For example, Safari's Intelligent Tracking Prevention shortens both to roughly 7 days. Both cookies are first-party and marked `SameSite=Lax` and `Secure`. Only the pixel script in the browser writes them, and only after your consent signal allows storage. Profound's servers set no cookies at all. ## Data collection Profound Pixel collects the following data: | Category | Examples | Notes | | - | - | - | | Visitor ID | A random browser-generated ID | Generated by Profound Pixel, not derived from any personal attribute | | Ad and click IDs | Ad and campaign identifiers from the landing URL | - | | Acquisition source | The channel or hostname the visitor came from | This does not include the full referrer URL | | Page context | Page URL, referrer, title | Any personal data is redacted on Profound's servers | | Query string | The page URL's query parameters, such as `?ref=newsletter` | Derived on Profound's servers, with sensitive keys dropped | | Your user IDs | `external_user_id` and `external_account_id` | Collected if you send them in [`identify` call](/pixel/events#tie-events-to-your-own-user-ids) | | Network | IP address | Never stored for visitors in the EU/EEA, the UK, or Switzerland | | Country | A two-letter country code (such as US, GB, FR) | No city or precise location is collected | | Device | The browser's raw User-Agent string, taken from the request header | - | | Event properties | Whatever you send in event properties | - | | Consent record | The permission flags and the signal they came from | - | **Notes**: * Whether the IP address is discarded or stored depends on the country Profound's servers detect for the request. The detection is reliable in practice, but it isn't guaranteed for any individual request. If the detection fails, the country is recorded as empty, and the IP address is stored. * Collected data is processed in the United States. * Conversion data is not forwarded to OpenAI, Google, or any other ad platform today. If that ever changes, Profound will inform you before it is switched on. ## Optional: forwarding conversions to OpenAI > [!NOTE] > > This capability is still in development and subject to change. When you run ads with OpenAI, OpenAI normally learns about your conversions through [its own pixel](https://developers.openai.com/ads/measurement-pixel) or its [Conversions API](https://developers.openai.com/ads/conversions-api). Profound can handle this for you: because Profound Pixel uses the same event names as OpenAI, Profound can pass your conversions on to OpenAI's Conversions API from its own servers, matched to the ad through OpenAI's click ID. For you, this would mean: * OpenAI receives the conversions it needs to credit your ads and adjust bidding. * Profound Pixel stays the only tag on your site: you don't install OpenAI's pixel, and you keep the full first-party record with Profound. * Visitors stay in control: the forwarding is governed by the [Ad-platform sharing permission](#the-consent-signal), which stays denied until consent allows it. If this is an option you would like to explore, speak to your Profound team. # Events reference Source: https://docs.tryprofound.com/pixel/events Profound Pixel events, their fields, and usage ## Standard events Profound Pixel recognizes the following standard events. Each event accepts a set of optional fields. See [Field sets](#field-sets) for what each set accepts. | Event | When to send it | Field set | | - | - | - | | `page_viewed` | A visitor views a page | `contents` | | `contents_viewed` | A visitor views a product, listing, article, or other content unit | `contents` | | `items_added` | A visitor adds items to a cart or selection | `contents` | | `checkout_started` | A visitor begins checkout | `contents` | | `order_created` | A purchase completes | `contents` | | `subscription_created` | A paid subscription starts | `plan_enrollment` | | `trial_started` | A free trial starts | `plan_enrollment` | | `lead_created` | A visitor submits a lead form or requests contact | `customer_action` | | `registration_completed` | A visitor finishes account or event registration | `customer_action` | | `appointment_scheduled` | A visitor books a meeting, demo, or consultation | `customer_action` | ### Field sets | Field set | Recognized fields | | - | - | | `contents` | `amount`, `currency`, `contents[]` | | `plan_enrollment` | `plan_id`, `amount`, `currency`, `contents[]` | | `customer_action` | `amount`, `currency` | > **contents set properties** > > | Property | Type | Required | Description | > | - | - | - | - | > | `amount` | number | no | A whole number in minor units for the given currency (cents for US dollars). For example, \$129.99 = `12999`. Always pair it with `currency` | > | `currency` | string | yes, if `amount` is present | An [ISO 4217](https://en.wikipedia.org/wiki/ISO_4217) currency code, such as `USD` | > | `contents[]` | array | no | A list of items involved in the event. Each entry takes `id`, `name`, `content_type`, `quantity` (a whole number), `amount`, and `currency` | > > ```javascript Example event theme={null} > pfq('track', 'order_created', { > amount: 12999, currency: 'USD', > contents: [ > { > id: 'SKU123', > name: 'Widget', > content_type: 'product', > quantity: 1, > amount: 12999, > currency: 'USD' > } > ] > }); > ``` > **plan\_enrollment set properties** > > | Property | Type | Required | Description | > | - | - | - | - | > | `plan_id` | string | no | Your internal plan identifier | > | `amount` | number | no | A whole number in minor units for the given currency (cents for US dollars). For example, \$129.99 = `12999`. Always pair it with `currency`. | > | `currency` | string | yes, if `amount` is present | An [ISO 4217](https://en.wikipedia.org/wiki/ISO_4217) currency code, such as `USD` | > | `contents[]` | array | no | A list of items involved in the event. Each entry takes `id`, `name`, `content_type`, `quantity` (a whole number), `amount`, and `currency` | > > ```javascript Example event theme={null} > pfq('track', 'subscription_created', { > plan_id: 'pro-monthly', > amount: 4900, > currency: 'USD', > contents: [ > { > id: 'pro-monthly', > name: 'Pro plan, monthly billing', > content_type: 'plan', > quantity: 1, > amount: 4900, > currency: 'USD' > } > ] > }); > ``` > **customer\_action set properties** > > | Property | Type | Required | Description | > | - | - | - | - | > | `amount` | number | no | A whole number in minor units for the given currency (cents for US dollars). For example, \$129.99 = `12999`. Always pair it with `currency`. | > | `currency` | string | yes, if `amount` is present | An [ISO 4217](https://en.wikipedia.org/wiki/ISO_4217) currency code, such as `USD`. | > > ```javascript Example event theme={null} > pfq('track', 'lead_created', { > amount: 50000, > currency: 'USD', > form: 'contact-sales' > }); > ``` ### Custom properties Add your own custom properties (such as `order_id` or `product_id`) alongside the recognized fields. Two limits apply: up to 128 properties per event, and up to 64 KiB per request body. An event that exceeds either limit is rejected with a `400` error. ## Custom events For anything outside the standard set, send a custom event: call `pfq('trackCustom', …)` with any event name and any properties you choose. ```javascript theme={null} pfq('trackCustom', 'requested_demo', { plan: 'enterprise' }); ``` Maximum length for event names is 128 characters. The suggested naming convention is lowercase letters, numbers, underscores or dashes, and a name that doesn't match a [standard event](#standard-events) name, so your custom events are easy to tell apart in reporting. > [!WARNING] > > **Never send customers' personal data in events.** This includes emails, phone numbers, names, government IDs, payment data, street addresses, and special-category data, such as health, financial account details, or biometrics. As a safety measure, Profound drops personal data keys and redacts values that look like personal data. ## Tie events to your own user IDs If you need to match conversions to records in your own systems, make an `identify` call with your internal identifiers after the customer logs in and before any events are sent: ```javascript theme={null} pfq('identify', { external_user_id: 'u_123', external_account_id: 'acct_456' }); ``` The following fields are accepted: | Field | Type | Required | | - | - | - | | `external_user_id` | string | no | | `external_account_id` | string | no | Any other fields are silently ignored. The pixel holds the IDs in memory until your consent signal allows sending, then attaches them to the events that follow. > [!WARNING] > > Send internal IDs only, never customers' names, emails, phone numbers, or other identifiers. Personal data in the `identify` fields causes the whole event to be rejected with a `400` error. # FAQ Source: https://docs.tryprofound.com/pixel/faq Frequently asked questions about Profound Pixel > **Does Profound Pixel work only with OpenAI ads?** > > No. Profound Pixel measures AI-channel traffic broadly: it attributes conversions to paid OpenAI ads and to organic AI answer traffic, and it also records other acquisition channels, such as Google or Bing. > **How large is the Profound Pixel tag?** > > It's a lightweight JavaScript tag, about 8KB compressed. It loads asynchronously and never blocks your page from rendering. Learn more in [How the pixel script works](/pixel/overview#how-the-pixel-script-works). > **Is the pixel ID safe to expose in my web page source code?** > > Yes. The pixel ID identifies you, and it isn't a secret or token. Profound protects it on its side: each pixel ID has a list of allowed domains, and events from other domains are not processed. Learn more in [Your pixel ID](/pixel/overview#your-pixel-id). > **What happens if I send personal data in the event payload?** > > Profound has protections in place if that happens: > > * The pixel identifies visitors by random IDs only. > * In the browser, the pixel drops personal data keys, such as name or email, before sending the events. > * On its servers, Profound drops a broader set of personal data keys and redacts values that look like personal data. > > However, even with those protections in place, don't send personal data in events. > > Learn more in the [Events reference](/pixel/events). > **I have OpenAI's pixel on my site. Can I run Profound Pixel alongside it?** > > Yes, running both pixels works today. Profound doesn't forward conversions to OpenAI, so conversions are not counted twice. > > If you'd rather keep one pixel on your site, Profound Pixel can be set up to send your conversions to OpenAI for you. If you'd like that, speak to your Profound team. Learn more in [Forwarding conversions to OpenAI](/pixel/consent-and-privacy#optional-forwarding-conversions-to-openai). > **Can I send conversions to Profound directly from my own servers instead of through the browser pixel?** > > Yes, a server-to-server integration is supported alongside the browser pixel. Speak to your Profound team about setting it up. # Install Profound Pixel Source: https://docs.tryprofound.com/pixel/install A step-by-step guide to install and use your Profound Pixel This guide walks you through everything you need to get started with Profound Pixel: getting your pixel ID, adding the code snippet to your website, setting up and verifying conversion tracking. ## Before you start Have these things in place before any code goes on your site: 1. **Sign the data processing addendum.** The pixel sends Profound end-user data your current agreement doesn't cover. Reach out to your ads representative, and don't install until the addendum is signed. 2. **Tell your Profound team your domains.** Each pixel ID carries its own list of allowed domains, and events from a domain that isn't on the list are not processed. Share every hostname you'll install the pixel on. ## Installation steps **1. Get your pixel ID** In the Profound platform, go to **Ad Manager** (in the left sidebar, under **Ads**), select **Conversions** in the top-right corner, then under **Your pixels**, select **Generate pixel**. > [!NOTE] > > Each pixel ID covers one site or environment. **2. Add the snippet to your website** Install the snippet manually or through Google Tag Manager. **Manual installation** Paste this code snippet into the `` of every page you want to measure, and replace `` with the pixel ID you retrieved in [step 1](#step-1): ```html expandable theme={null} ``` Keep both `pfq` function calls. They do different jobs: * `pfq("init", …)` sets up identity and consent handling and captures the ad click ID from the landing URL. It records nothing by itself. * `pfq("track", "page_viewed")` records the page view. Without it, the page reports nothing. **Placement rules**: * Place the snippet on every page you want measured. A good practice is to add it to every page through your global layout or base template. * Place it in ``, as early as practical. The snippet must run before anything can rewrite the landing URL, to prevent the loss of ad click IDs. * Place it once per page. The snippet ignores copies of itself (`if (w.pfq) return`), but the `page_viewed` line doesn't: copies count every page view multiple times. > [!NOTE] > > **Single-page apps must record their own page views.** The pixel doesn't watch for route changes, so call `pfq('track', 'page_viewed')` once on each route change you want recorded. **Google Tag Manager** If you manage your site's tags in Google Tag Manager, install the pixel as a [Custom HTML tag](https://support.google.com/tagmanager/answer/6107167): 1. In Google Tag Manager, create a new tag and choose the **Custom HTML** tag type. 2. Paste in the code snippet from the **Manual installation** tab, and replace `` with the pixel ID you retrieved in [step 1](#step-1). 3. Set the trigger to **Initialization - All Pages**. 4. Under **Advanced Settings** > **Tag firing options**, choose **Once per page**. 5. Under [Consent Settings](https://support.google.com/tagmanager/answer/10718549), choose **No additional consent required**. > [!NOTE] > > The last two settings may look overly permissive, but they're intentional: the pixel manages consent itself, and firing it too late loses the ad click ID, so conversions can't be tied back to ads. If your site is a single-page app, add a second tag that calls `pfq('track', 'page_viewed')` with a [History Change trigger](https://support.google.com/tagmanager/answer/7679322), so route changes are recorded as page views. **3. Set your consent posture** > [!TIP] > > Learn about how the pixel reads consent signals and what each setting does in [Consent and privacy](/pixel/consent-and-privacy#consent-handling). The pixel starts in opt-in mode: it stores and sends nothing until a consent signal grants it. If your site is in the UK, the EU, or the wider European Economic Area, no action is required. Your consent management platform (CMP) provides the consent signal for the pixel. If you have a US-only site, you likely don't have a CMP, so you need to explicitly set the consent posture to opt-out for the pixel to be able to record events. Edit the `pfq("init", …)` line inside the snippet you added in [step 2](#step-2) so it passes the posture option: ```javascript theme={null} pfq("init", "", { posture: "opt-out" }); ``` **4. (optional) Allow the pixel in your Content Security Policy** If your site enforces a strict [Content Security Policy](https://developer.mozilla.org/en-US/docs/Web/HTTP/Guides/CSP), it blocks the pixel until you allow Profound's domains. Add these directives to your policy: * [`script-src`](https://developer.mozilla.org/en-US/docs/Web/HTTP/Reference/Headers/Content-Security-Policy/script-src) `https://pixel.profound.click` allows the browser to load the pixel script. * [`connect-src`](https://developer.mozilla.org/en-US/docs/Web/HTTP/Reference/Headers/Content-Security-Policy/connect-src) `https://events.profound.click` allows the pixel to send events. The inline snippet from [step 2](#step-2) also needs a [nonce or hash](https://developer.mozilla.org/en-US/docs/Web/HTTP/Reference/Headers/Content-Security-Policy/script-src) on its ` ``` **Notes**: * The `{{DLV - …}}` variable names given above are examples only. Use the variable names defined in your Google Tag Manager container. Learn more in the [Data Layer Variables documentation](https://support.google.com/tagmanager/answer/7683362). * The `* 100` multiplier in the code example only suits currencies with two decimal places, such as USD or EUR. For other currencies, match the multiplier to the currency's number of decimals. > [!TIP] > > For the detailed breakdown of events and their fields, see the [Events reference](/pixel/events). **6. Verify it works** Complete a test conversion on your own site (for example, a test purchase). In your browser's network tab, filter for `events.profound.click`. Locate the event request produced by your test conversion and check the following: 1. It's a `POST` request with a `202` status response. 2. The `amount` field in the payload body is a whole number in minor units (the smallest unit for the given currency): for example, an amount of 129.99 US dollars should show as `12999`. If the amount you see is in different units, go back to the tracking code you added in [step 5](#step-5) and correct the units it sends. 3. If your site receives European/UK traffic, test the conversion as a European visitor. Until you accept the consent banner, the pixel should send no requests and write no cookies. After you accept, requests to `events.profound.click` should appear in the network tab, and the pixel's cookies should appear in your browser's cookie storage. > [!TIP] > > Simulate a visit to your site from Europe by using a VPN, or by setting an EU-based location override in your browser's DevTools. After completing these steps, your pixel should be set up and ready to go. If you have issues during setup, see [Troubleshooting](/pixel/troubleshooting) for the most common issues, or [contact support](mailto:support@tryprofound.com). # About Profound Pixel Source: https://docs.tryprofound.com/pixel/overview A script that ties conversions on your site back to the AI traffic that drove them > [!NOTE] > > Profound Pixel and Ad Manager are beta features. We're gradually rolling them out to customers. Follow [the Profound blog](https://www.tryprofound.com/blog) for updates. Profound Pixel is a lightweight JavaScript tag that records conversions on your site and attributes them to the AI-channel traffic that drove them. This covers both paid ads and organic AI answer traffic. ## Key facts * **The tag follows the standard pixel pattern.** The install shape matches other major pixel providers', and the events use [the same names as OpenAI's](https://developers.openai.com/ads/measurement-pixel). * **The async loader never blocks rendering.** If the Profound content delivery network is unreachable or the browser version is too old, the pixel goes inert and doesn't throw errors on your page. * **The pixel doesn't ship a cookie banner.** It reads the consent signal your existing consent management platform emits and only fires events when consent is granted. See [Consent and privacy](/pixel/consent-and-privacy). * **No package to install, no code to bundle.** Profound pre-builds the script in its continuous integration pipeline and hosts it on its own domain, `pixel.profound.click`. ## How the pixel script works To use the pixel, you paste a code snippet into your site and add function calls that record [events](/pixel/events). Learn more in the [installation guide](/pixel/install). Profound hosts the pixel script on its own domain. When a page loads, the snippet fetches the pixel script (`p.js`) from `https://pixel.profound.click/sdk/v1/`. > [!NOTE] > > Profound's build process enforces the script's size limit: under 8 KB compressed. Once the script runs, it reads your site's [consent signal](/pixel/consent-and-privacy) and captures any ad and campaign IDs from the URL the visitor landed on. It then processes the events the page reports: the page view that the code snippet records on every page load, plus any conversions your code tracks. The pixel sends every event that consent allows to `https://events.profound.click/api/v1/events`. Profound records the event there and attributes it to the AI ad or AI answer that brought the visitor. > [!TIP] > > Serving the script from your own domain (for example, `pix.yourbrand.com`) is available as an optional enterprise add-on. Ask your Profound team if you need it. ## Your pixel ID Get your pixel ID from the **Ad Manager** page in the Profound platform. Each pixel ID covers one site or environment, and your account can hold more than one. The ID is safe to expose in page source: it identifies you, it isn't a secret or an auth token, and it never needs rotating. Profound enforces integrity on its side. Each pixel ID has an allowlist of origins that should include every hostname you'll install the pixel on: the root domain (`example.com`), the `www` variant (`www.example.com`), and any checkout, landing-page, or regional subdomain. > [!TIP] > > Follow the [installation guide](/pixel/install) to install Profound Pixel. # Troubleshooting Source: https://docs.tryprofound.com/pixel/troubleshooting Common Profound Pixel issues, their causes, and fixes ## The events report the wrong amounts Your code likely sends `amount` in major units (dollars), but Profound reads the value as minor units (cents). GA4-style dataLayers carry major units, so this is common with Google Tag Manager. Send `amount` as a whole number in the currency's smallest unit: `12999` for \$129.99, not `129.99`. In Google Tag Manager, convert the dataLayer value: ```javascript theme={null} Math.round(Number({{DLV - value}}) * 100) ``` Replace `{{DLV - value}}` with a [Data Layer Variable](https://support.google.com/tagmanager/answer/7683362) name defined in your Google Tag Manager container. If your currency doesn't use two decimal places, adjust the `* 100` multiplier to match its number of decimals. ## Conversions aren't attributed to ads This issue can be caused by the pixel snippet running too late. If you installed the snippet manually, check that it's placed directly inside the `` tag of your HTML page and loads unconditionally. If you used Google Tag Manager, make sure that: * the **Consent Settings** in your tag are set to **No additional consent required**, as per [step 2 of the install guide](/pixel/install#step-2) * the trigger is set to **Initialization - All Pages** Learn more in [step 2 of the pixel installation guide](/pixel/install#step-2). ## Page views are missing on a single-page app The pixel doesn't watch for route changes, so it records one page view per full page load. Call `pfq('track', 'page_viewed')` on each route change you want recorded. In Google Tag Manager, use a [History Change trigger](https://support.google.com/tagmanager/answer/7679322). ## Page views are counted twice If you installed the snippet manually, check that the snippet is placed only once per page. If you used Google Tag Manager, check that **Advanced Settings** > **Tag firing options** is set to **Once per page**, as per [step 2 of the install guide](/pixel/install#step-2). ## Events return a `202` but don't appear in reporting The events are likely rejected silently: with origin enforcement on, an unknown pixel ID or an origin missing from the allowlist returns the same `202` as an accepted event. Check that the snippet has the correct pixel ID, and give your Profound team every origin you send events from: the root domain, the `www` variant, and any checkout or landing subdomains. ## The pixel records no events at all This can happen when the pixel is waiting for a consent signal that never comes. If your website doesn't use a consent management platform (common for US-only sites), set the consent posture to opt-out as instructed in [step 3 of the installation guide](/pixel/install#step-3) and redeploy the snippet. ## An event is rejected with a `400` error Some possible reasons for this are: * Profound detected personal data in the [`identify`](/pixel/events#tie-events-to-your-own-user-ids) fields. Check that they carry only internal identifiers. * The event has more than 128 properties. * The request body of the event exceeds 64 KiB. Learn more about the event data limitations in the [Events reference](/pixel/events). ## Properties or IDs are missing from recorded events This can be one of the following: * The property key or value looks like personal data, so it was dropped in the browser or on Profound's servers. * If an [`identify`](/pixel/events#tie-events-to-your-own-user-ids) field is missing, check if the property key is correctly typed. Learn more in the [Events reference](/pixel/events). ## Attribution stops after about 7 days in Safari Safari's Intelligent Tracking Prevention limits script-written cookies to roughly 7 days. This is browser behavior that can't be changed. Using a different browser will fix the issue. ## The opt-out consent posture behaves as opt-in for some visitors The pixel checks each browser's timezone and treats every visitor with a European timezone as opt-in: it records nothing until they give consent. If your pixel is scoped to a single non-EU region, or your local data protection regulations otherwise allow the opt-out posture, you can disable the check by adding `detectRegion: false` to the `pfq('init', ...)` call in your install snippet: ```javascript theme={null} pfq("init", "", { detectRegion: false }); ``` Learn more in [Consent and privacy](/pixel/consent-and-privacy#sites-without-cmp). # About Prompt Volumes Source: https://docs.tryprofound.com/prompt-volumes/about Explore real prompts that users submit to AI answer engines > [!NOTE] > > **Available on:** all plans > > **Find it in:** Analytics > Prompt Volumes Prompt Volumes give you direct access to Profound's dataset of real prompts submitted to AI answer engines by actual users. Use it to discover what questions people are actually asking ChatGPT, Gemini, and Perplexity about topics relevant to your business, so you can validate your tracking strategy, understand user language, and prioritize content based on real signal. ## The problem with traditional keyword research When someone wants to find the best corporate credit card option, they used to Google "best corporate credit card." Now they ask their preferred AI chat: "What's the best corporate credit card for small teams?" Traditional keyword research tools capture what people type into search bars, not how they hold conversations with AI. The language is different, the intent is different, and the questions are longer and more specific. Without visibility into real AI prompting behavior, teams face three compounding problems: * **Misdirected tracking:** monitoring prompts that reflect SEO assumptions, not actual user questions. * **Misaligned content:** writing for search engines while users are talking to AI assistants. * **Missed opportunities:** finding out about rising topics only after competitors have already moved on them. ## Profound's solution Prompt Volumes is a proprietary dataset built by aggregating, cleaning, and modeling real conversations between users and AI answer engines. It transforms raw AI conversation data into structured, searchable insights about what your market is actually asking, so you can: * Validate whether the topics you're tracking reflect **real user demand** * **Discover the exact phrasing** people use when asking about your category * **Understand user intent** across informational, commercial, generative, and conversational queries * **Identify** which **regions** are driving specific queries * **Prioritize** content and tracking **strategy** on signal, not assumption ## How Prompt Volumes work Prompt Volumes is a dataset built by licensing AI answer engine conversations, cleaning the data, applying probabilistic modeling, and visualizing the results as intuitive charts and tables your team can act on. > [!NOTE] > > All data is anonymized, aggregated, scrubbed of PII, and fully compliant with GDPR and CCPA. **Data sources:** ChatGPT, Gemini, and Perplexity. ## Key features ### Keyword search and Bulk analysis Enter a short, broad keyword to query the dataset and see how often that topic appears across real AI conversations. You can also compare multiple keywords at once using Bulk analysis (available on the Enterprise plan), which ranks topics by volume and helps you prioritize what to track before you invest in it. Keywords can be searched using phrase match (any word order) or exact match (specific word order). Start broad and use the results to narrow down into more specific language. ### Volume and trend visualization The **Overview** tab shows how prompt volume for your keyword changes over time, alongside a breakdown of conversations by intent and a list of related terms worth exploring. Use it to spot rising topics and understand the specific language your audience is using. ### Intent analysis The Conversation Share by Intent chart on the Overview tab breaks down why people are asking about a topic, classifying prompts into informational, commercial, generative, and conversational categories. This helps you match content to where users are in their journey. ### Regions The Regions tab shows where prompts about your keywords come from, as a heat map and a per-region volume table. Note that coverage is strongest in the US, UK, and select European markets. ### Keyword lists Organize related keywords into named lists to track topic clusters over time and keep your research organized by project or audience segment. ### Relevant prompts sample Discover a sample of real user prompts that caused an AI answer engine to cite a specific page on your (or a competitor's) domain in its response. Compare your citations with competitors and explore which exact URLs on your site are being cited and for what kinds of questions. ### Prompt Research Reports Prompt Research Reports provide data-driven gap analysis, comparing what real users are asking AI engines against what you're currently tracking in Answer Engine Insights. Use them to get a data-backed starting point, surface what you may be missing, or understand where your customers are in their purchasing journey. ## Historical data Prompt Volumes historical data availability depends on your region and platform. For the US, ChatGPT, Gemini, and Perplexity data goes back to January 2025. For all other regions Profound currently tracks, data is available from January 2026. This means you can query any keyword (even one you just added) and view historical volume trends from **January 2025 onward** for the US, or **January 2026 onward** for other regions. > [!NOTE] > > Data coverage varies by region. For example, in the US, data is currently available for ChatGPT, Gemini, and Perplexity, while Norway only has ChatGPT. # Prompt Volumes FAQ Source: https://docs.tryprofound.com/prompt-volumes/faq Frequently asked questions about Prompt Volumes > **Where does the Prompt Volumes data come from?** > > Profound licenses data from well-known, established double opt-in consumer panel providers. These panels consist of millions of active AI assistant users who have opted in to have their behavior tracked and anonymized. Profound receives tens of millions of real prompts each month from these panels, cleans the data, applies probabilistic modeling to correct for demographic and geographic biases, and produces the insights visible in the platform. > > All data is fully compliant with CCPA and GDPR, and Profound also applies additional anonymization and aggregation on top of vendor-level protections. > **Do you use synthetic or simulated data in the dataset?** > > No. Every prompt in the dataset comes from real users interacting with AI answer engines. Synthetic or simulated data is not used at any point. > **How fresh is the data?** > > Prompt volume data is updated on a rolling weekly basis, with a data latency of less than two weeks. This means the trends you see in Prompt Volumes reflect near-current conversations. > **How far back does the data go?** > > This depends on your region and the platform in question. Generally, for the US it's January 2025, and for all other regions Profound currently tracks, it's January 2026. > > To learn more about data coverage, see the **Historical data** section in [About Prompt Volumes](/prompt-volumes/about) article. > **Which AI platforms are included?** > > ChatGPT, Gemini, and Perplexity data is available. Coverage per country reflects where each platform is available, so it may vary by region. Get in touch with your Profound representative to learn more about what's available to you. > > Additional platforms are in scope for future expansion. > **Why does the data primarily show ChatGPT usage?** > > ChatGPT typically accounts for the largest share of prompt volume. For date ranges before January 2026, only US data is available, so earlier periods reflect US usage only. For more recent date ranges, data is available across all platforms and covered regions. > **Are all regions covered?** > > No. Coverage is strongest in the US, UK, and select European markets. > **Can I see rising topics and trends over time?** > > Yes. The Prompt Volumes chart shows how keyword volume changes over time so you can spot rising topics and seasonal shifts. The Keyword Hierarchy tab shows how a topic expands into related terms, and the Similar Keywords table surfaces adjacent terms that commonly appear alongside your keyword. > **Where do tracked prompts come from?** > > You create them yourself, either manually or with AI-assisted suggestions based on your brand and topics. Prompt Volumes helps you write better prompts by showing you the actual language real users are submitting to AI engines in your category, so your tracked prompts reflect genuine market language. > **Why aren't my keyword phrase searches returning results?** > > Prompt Volumes match keywords across AI conversations, so volume scales inversely with specificity: single words return the broadest results, while full sentences return very few. The sweet spot is typically 2–4 words that capture the core intent. Use Keyword Hierarchy and Similar Keywords to find related terms and drill into subcategories. > **What's the difference between Prompt Volumes and the Prompts table in Answer Engine Insights?** > > The Prompts table in Answer Engine Insights shows the specific prompts you're actively tracking and how your brand performs against them. Prompt Volumes shows the full landscape of what users are asking AI about any topic, including questions you haven't started tracking yet. Use Prompt Volumes to decide what goes into your Prompts table. # Get started with Prompt Volumes Source: https://docs.tryprofound.com/prompt-volumes/getting-started The quickest way to start searching and analyzing Prompt Volumes This is a short guide on the quickest way to start using and analyzing Prompt Volumes. More detailed how-to guides are available in [Analyze Prompt Volumes](/prompt-volumes/how-tos/analyze-prompt-volumes), [Keyword searches and lists](/prompt-volumes/how-tos/keyword-searches-and-lists), and other articles in this section. ## Step 1: Analyze a prompt The simplest way to get started is with a keyword or phrase analysis: 1. Open the **Prompt Volumes** section in the left sidebar navigation. 2. Enter a starting keyword or phrase (for example, "AI search optimization" or "business credit cards") in the text input at the top of the page and click **Analyze**. 3. Toggle **Bulk analysis** to compare multiple topics and rank by volume (available on the Enterprise plan). 4. Prioritize keywords with meaningful volume. If you see no volume, go broader until you get signal. Usually, the keywords or phrases for analysis come from prompt topics you defined in **Answer Engine Insights**. ## Step 2: Review your results After clicking **Analyze**, you'll land on a results page that includes: * **Prompt Volume chart** — how often your keyword appears across AI platforms * **Conversation Share by Intent** — why people are prompting about your keyword * **Similar Keywords** — related terms worth exploring Switch to the **Regions** and **Keyword Hierarchy** tabs to see where prompts are coming from and how terms relate to your keyword. ## Step 3: Create a keyword list Once you find useful keywords or phrases, group them into lists for ongoing tracking: * From the Prompt Volumes landing page, click **+ Create List** * Add or remove keywords directly from the list view * Click any keyword in the list to view its performance ## Step 4: Revisit regularly User phrasing evolves as AI adoption grows. Check Prompt Volumes regularly to catch rising topics, shifting language, and emerging intent patterns before they become table stakes. # Analyze prompt volumes Source: https://docs.tryprofound.com/prompt-volumes/how-tos/analyze-prompt-volumes Read the Overview, Regions, and Keyword Hierarchy tabs and apply filters in Prompt Volumes Submitting a keyword query, or selecting a keyword from a list, redirects you to the corresponding results within the Prompt Volumes dataset. From there, you can review several charts and tables that show how frequently your keywords appear across different answer engine platforms. These visualizations are organized into the following tabs: Overview, Regions, Keyword Hierarchy. ## Overview tab Three main charts and tables provide an overview of your keyword query results. Use these to understand the volume of prompts that contain your queried keywords. ### Prompt Volume The Prompt Volume chart shows how many keyword matches were found in the prompt dataset. Adjust the visualization using the Chart Config controls above the chart. Display results as either a line or bar chart, and group results by platform or show them without grouping. ![pv\_7.png](https://mintcdn.com/profound-37face47/wPfOqxyNzo8IXjy3/images/prompt-volumes/how-tos/analyze-prompt-volumes-1.png?fit=max\&auto=format\&n=wPfOqxyNzo8IXjy3\&q=85\&s=f9a32c54d8c65e55633c134bdbff4063) ### Conversation Share by Intent The Conversation Share by Intent chart shows the share of conversations by intent, based on a representative sample of user conversation data over the selected time range. Profound classifies intent as informational, commercial, conversational, or generative (requests to create content). ![pv\_8.png](https://mintcdn.com/profound-37face47/wPfOqxyNzo8IXjy3/images/prompt-volumes/how-tos/analyze-prompt-volumes-2.png?fit=max\&auto=format\&n=wPfOqxyNzo8IXjy3\&q=85\&s=9b7a96b1e9d9c0ef8bc71fea57fb5d3e) Switch between the sunburst chart and a table view using the toggle above the chart. ### Similar Keywords The Similar Keywords table displays keywords that commonly appear in similar prompting patterns. Select any keyword in this list to run a new query for that term. ## Regions The Regions tab displays keyword query results broken down by region. The Prompt Volume by Region chart is a heat map showing the volume of prompts containing the queried keyword across geographic regions. A table to the right lists the exact prompt counts for each region. ## Keyword Hierarchy The Keyword Hierarchy tab contains an interactive hierarchy chart. The queried keyword heads the chart. Subsequent levels show expanded keywords and their corresponding prevalence in the results. ![pv\_9.png](https://mintcdn.com/profound-37face47/wPfOqxyNzo8IXjy3/images/prompt-volumes/how-tos/analyze-prompt-volumes-3.png?fit=max\&auto=format\&n=wPfOqxyNzo8IXjy3\&q=85\&s=2632a0e895588d91936ad5db2f57c111) Adjust the number of keywords per level and depth of the hierarchy using the number stepper on the left side of the chart. ## Filters Filters are available across Prompt Volumes. They let you adjust the analytical time frame and narrow the data view. Filters appear as dropdown menus beneath the tabs. ![pv\_6.png](https://mintcdn.com/profound-37face47/wPfOqxyNzo8IXjy3/images/prompt-volumes/how-tos/analyze-prompt-volumes-4.png?fit=max\&auto=format\&n=wPfOqxyNzo8IXjy3\&q=85\&s=1024dc67032d8afcda926c3d8f7051ee) ### Date Range filter Use the date range filter to select the time window for the prompt data. Choose **All Time**, switch between **Weeks** and **Months**, or turn on **Range** to define a custom range using the calendar. Only prompts submitted during the selected period are counted in the Prompt Volumes charts. Charts display differences by calculating the change between the selected time frame and a previous period. Adjust this comparison period using the **Prev. Period** dropdown. ### Attribute filters The **Platforms** and **Regions** filters let you narrow chart data. While each chart includes filters relevant to its context, filter functionality is consistent across charts. To adjust filters, open the dropdown for the desired attribute and select any platform or region to include in the chart view. # Keyword searches and lists Source: https://docs.tryprofound.com/prompt-volumes/how-tos/keyword-searches-and-lists Query the Prompt Volumes dataset with keywords and save results as lists There are several ways to query the Prompt Volumes dataset. Profound scans prompts for keywords and generates data points when matches are found. Effective keyword creation and management are essential for producing meaningful query results. ## How to use keywords to query Prompt Volumes data The Prompt Volumes search bar is the fastest way to query the Prompt Volumes dataset. Enter a keyword into the search bar and click **Analyze** to go directly to the query results. ![pv\_1.png](https://mintcdn.com/profound-37face47/d3tYUJ4mfdayQ4Zm/images/prompt-volumes/how-tos/keyword-searches-and-lists-1.png?fit=max\&auto=format\&n=d3tYUJ4mfdayQ4Zm\&q=85\&s=75a4882f0b27f4c9bbc0354ee5c224d3) ### Bulk analysis The **Bulk analysis** option lets you input multiple keywords into the search and run queries against the dataset using all of them at once. Bulk analysis is available on the Enterprise plan. ### Phrase matching Profound supports two matching modes. **Exact matching** returns only prompts containing the exact keyword string. **Phrase matching** scans for prompts containing the keywords in any order. For example, if the keyword is "ai tools," exact matching excludes a prompt like "what tools are good in the ai space?" With phrase matching enabled, that prompt appears in the results since both "ai" and "tools" are present. ## How to create keyword lists Group related keywords into lists to track how specific initiatives or strategies perform across answer engines. This lets you analyze the collective performance of a set of terms. From the Prompt Volumes landing page, select **+ Create List** to create a new list. Add or remove keywords directly from the list view. Click any keyword in the list to view its performance within the Prompt Volumes dataset. ![pv\_5.png](https://mintcdn.com/profound-37face47/wPfOqxyNzo8IXjy3/images/prompt-volumes/how-tos/keyword-searches-and-lists-2.png?fit=max\&auto=format\&n=wPfOqxyNzo8IXjy3\&q=85\&s=627ceb23d445b76ef8672966f5807f59) # Using Prompt Volumes with Workflows Source: https://docs.tryprofound.com/prompt-volumes/using-with-workflows Pull Prompt Volumes data into Workflows with the Prompt Volumes node Prompt Volumes data can be pulled directly into Profound's [Workflows](/agents/workflows/about-workflows) using the **Prompt Volumes node** in the Workflow Builder. ## What the Prompt Volumes node does The **Prompt Volumes node** retrieves keyword volume data from your Prompt Volumes dataset and surfaces it as structured output within your Workflow. Use this node when you want to: * Pull volume trends for specific keywords as part of an automated content strategy workflow * Feed keyword frequency data into a [Prompt LLM](/agents/workflows/nodes/prompt-llm) node for analysis, prioritization, or content brief generation * Monitor keyword volume changes over time as part of a recurring reporting Workflow * Incorporate real-world prompt demand data alongside your Answer Engine Insights metrics in a single automated workflow ## Passing Prompt Volumes output to other Workflow nodes Like all Profound Data nodes, the ​ **Prompt Volumes node** produces a named output variable you can pass into any other node that accepts text or structured data inputs. For example, a [Prompt LLM](/agents/workflows/nodes/prompt-llm) node can summarize trending topics, surface content gaps, or draft briefs. A [Slack](/integrations/slack/connect-slack-to-profound) node can deliver keyword insights directly to your team. Don't be afraid to experiment with different node combinations to find the workflows that work best for your team. # About Shopping Source: https://docs.tryprofound.com/shopping/about See how your products appear inside AI-powered shopping experiences > [!NOTE] > > **Available on:** the Enterprise plan > > **Find it in:** Analytics > Shopping Shopping Analysis gives retail and e-commerce brands a clear view of how their products appear inside AI-powered shopping experiences. Profound captures the full AI response: product tiles, images, prices, merchant links, and buy buttons. This lets you see exactly which products are featured, which retailers own the checkout, and how your brand compares to competitors. Shopping Analysis is currently focused on ChatGPT Shopping. Coverage of additional AI commerce surfaces, including Perplexity and Gemini, is evolving. Shopping Analysis is most relevant for retail, e-commerce, and CPG brands with physical or digital products. > [!NOTE] > > **Shopping mode** is a feature that activates in an AI chat when a prompt signals purchase intent. Instead of a text answer, AI returns a visual carousel of product tiles. > > **Product tiles** are the individual card-style UI components that display a product in AI Shopping Mode. Click a tile to see pricing and purchase options, and additional information sections such as "What to know" and "What people are saying," depending on the product. ## AI shopping is a blind spot for brands More customers are starting their purchase journey by asking an AI rather than visiting a website. When they do, the AI recommends specific products, describes them, and links to merchants, all without any input from brands. Brands have no visibility into which products are recommended, how they're described, or which competitors appear. When a product does appear, the checkout link may route to a third-party retailer rather than the brand's own store. Because AI responses surface individual SKUs, a brand can appear to have strong category visibility while quietly losing product slots to competitors. ## How Profound fills the visibility gap Profound Shopping Analysis treats AI shopping surfaces the same way behavioral analytics tools treat a website: as a measurable, improvable channel. The platform runs your tracked prompts through an LLM, monitors which ones trigger a shopping mode response, and captures the full result when they do. You get product-level data on placement, merchant attribution, attribute accuracy, and competitive positioning. This is the same depth of insight you previously got from web analytics, now applied to conversational commerce. ## Key features ### Shopping Mode Rate Prompts that reliably trigger AI shopping mode typically combine a baseline commercial intent with one or two buyer profile factors, such as price range, gender, or preference. For example: * Best running shoes under \$150 * What refrigerator should I buy with an in-door ice machine * Affordable standing desk for small apartments Shopping Mode Rate shows what percentage of your tracked prompts trigger the shopping mode answer, rather than a standard text answer. Check it in **Shopping > Brands > Shopping Mode Rate** to understand how much signal you’re working with before reading any other data in the module. ### Shopping Visibility Score The Visibility Score tracks how consistently your brand and products appear across shopping mode responses. A score of 100% means your brand appears every time AI triggers shopping mode for that prompt set. The score breaks down by topic, and visibility can swing significantly between topics for the same brand, so topic-level review is more revealing than the overall figure. ### Merchant layer When your product appears in an AI Shopping tile, it typically includes multiple checkout links: some from third-party retailers, some from your own store. The merchant layer shows who those retailers are, how often they appear, and what share of their recommended products belong to your brand. Use this to understand whether your direct-to-consumer store is competitive at checkout or whether third-party retailers are capturing most of the traffic. ### Product layer (SKU-level analysis) The product layer tracks individual SKUs, not just brand mentions. You can see which specific products appear most in shopping results, which prompts surface them, and how AI describes their attributes. Competitors or unrelated products may be winning product placements in your category, and this view surfaces exactly where those gaps exist. # Shopping FAQ Source: https://docs.tryprofound.com/shopping/faq Frequently asked questions about Shopping analysis > **How does Profound track product appearances in ChatGPT Shopping?** > > Profound runs your tracked prompts through ChatGPT and checks whether each one triggers shopping mode. When it does, the full response is captured and analysed: product tiles, images, prices, merchant links, and product attributes. The data is structured and surfaced in Shopping Analysis, broken down by brand, merchant, product, and topic. > **Why is my Shopping Mode Rate low?** > > A low Shopping Mode Rate usually means your tracked prompts don't signal strong commercial intent to AI. Terms like "buy," "shop," "where to find," or references to price and budget tend to trigger shopping results. Reviewing your prompt set for commercial intent signals is the most effective way to improve the rate. > **Why don't some retailers appear in shopping feeds?** > > Shopping Analysis reflects what AI actually returns in response to your tracked prompts. Regional or niche retailers that don't appear in shopping responses for your category won't appear in the data. Coverage is not a complete inventory of all retailers in your market. > **Why does a competitor appear in my shopping results when they have no organic visibility?** > > AI shopping results are not determined by organic search rankings. AI may surface a competitor's product based on their product feed quality, merchant relationships, structured data, or attribute signals that are independent of their search engine optimization (SEO) performance. Shopping Analysis helps you identify exactly this pattern: products that win AI shopping placements without traditional search visibility. > **What content strategy helps with AI shopping visibility?** > > Profound's research found that AI shopping results lean on community discussion, consumer editorial, and review-heavy sources rather than B2B analyst content. Content optimised for AI shopping should be consumer-facing, review-oriented, and community-validated. This is a different content mix from what drives standard Answer Engine Optimization visibility. > **Can Shopping Analysis handle large product catalogues?** > > Shopping Analysis works at the SKU level and can surface which specific products appear in AI shopping results across a large catalogue. The platform is designed to handle retail-scale product sets. If you have questions about catalogue size or configuration for a very large product feed, speak with your customer success manager. # Get started with Shopping Source: https://docs.tryprofound.com/shopping/getting-started Navigate the Brands, Merchants, Products, and Prompts tabs in Shopping > [!TIP] > > To learn more about making the best use of Shopping Analysis, check out the Profound University module [Tracking Your Products in AI Shopping](https://university.tryprofound.com/courses/profound-101/modules/analyze/lessons/tracking-your-products-in-ai-shopping). The Shopping Analysis section is organized across four tabs: Brands, Merchants, Products, and Prompts. ## Step 1: Start with the Brands tab The **Brands** tab shows which brands appear in shopping carousels across your tracked prompts. Check your **Visibility Score** to see how often your brand appears and how it ranks against competitors. Review your **Shopping Mode Rate**. If it's very low (for example, below 5%), your tracked prompts may lack commercial intent and data will be sparse. Filter by topic to find where your brand dominates and where gaps exist. ## Step 2: Follow the checkout in the Merchants tab The **Merchants** tab shows who owns the purchase transaction when your products appear in shopping mode. Review **Merchant Share** rankings to see which retailers capture the most checkout options. Your direct-to-consumer store may rank below third-party retailers. Check **Brand Share by Merchant**. A dominant merchant with low brand share means your product is competing at checkout. ## Step 3: Review SKU performance in the Products tab The **Products** tab tracks which individual products appear in shopping mode responses. Review which SKUs appear most frequently in **Product Visibility** view. The top products in your category may not be yours. **Click into a product** to see how often it appears, which prompts surface it, and how AI describes its attributes. ## Step 4: Diagnose queries in the Prompts tab The **Prompts** tab shows which specific tracked prompts return your brand's products in shopping mode. Use it to identify the commercially oriented queries where your products appear in the carousel, and to find prompts where shopping mode triggers but your brand does not appear. # Agency Mode overview Source: https://docs.tryprofound.com/agencies/agency-mode-overview Manage multiple brands or client workspaces under a single Profound account [https://player.mux.com/jdABwUsFg3lhFGxBxH7QbTAxZrxcYOw200PXBg3RHWVU?default-hidden-captions=true\&thumbnail-time=2](https://player.mux.com/jdABwUsFg3lhFGxBxH7QbTAxZrxcYOw200PXBg3RHWVU?default-hidden-captions=true\&thumbnail-time=2) Agency Mode is designed for organizations that manage multiple brands or client workspaces under a single account. It allows agencies to create, configure, and manage separate brand environments, enabling focused brand analysis for multiple brand assets. Each brand workspace operates independently, with its own configuration, data, and lifecycle. This makes it possible to run short-term audits, or pitches, for prospective clients. It also addresses upsell opportunities that agencies have while also maintaining long-running workspaces for an agency’s active clients. > [!NOTE] > > Agency Mode is for marketing agencies and consultancies monitoring multiple brands and clients. This is distinct from Profound's [Agent Analytics](/agent-analytics/overview), which measures how answer engines assess your web presence. ## Agency Mode workspaces Agency Mode supports two primary types of workspaces: short-term pitch workspaces, and long-term client workspaces. ### Pitch workspaces Pitch workspaces are designed for short-term evaluations. Agencies use them to assess a prospective client’s AI search visibility, identify AEO growth and upsell opportunities, or prepare materials for other types of sales and business development conversations. A pitch workspace can be set up by agency Profound users [by entering details about the client and any relevant context for the prompts](/agencies/manage-brands#create-a-new-pitch). Profound uses this information to automatically generate industry-specific prompts and launch the workspace. Data generation typically takes 24-48 hours after workspace creation or when new prompts are added. Agency users can also upload a CSV with their own prompts if they prefer that to Profound prompt generation. After uploading prompts via CSV, it takes 48 hours to start seeing data for those new prompts in the workspace. A pitch workspace can be [promoted](/agencies/manage-brands#promote-a-pitch-workspace-into-a-client-workspace) to a full client workspace if the agency wins ongoing AEO business or wants to monitor a brand workspace on a long-term basis. To keep workspaces organized, pitch workspaces expire after a defined period (typically 30 days). Before expiration, agencies can extend the workspace for another 30 days using a credit, or promote it to a full client workspace by purchasing one from Profound. If no action is taken, the workspace expires automatically at the end of the designated time period. Expired pitches move to Inactive Workspaces, where historical data remains available in read-only mode for agency users to access later if they need it. Inactive workspaces can be reactivated later for an additional credit use. This can be done if business resumes with a prior prospect. ### Active client workspaces Active client workspaces support ongoing client work. These workspaces are configured for longer durations and are built for continuous monitoring, analysis, and content optimization. This gives agencies the ability to collect data and measure impact of AEO work on clients' AI search success metrics. Each client workspace maintains its own prompt set, data stream, competitors, LLMs tracked, and configuration. This allows agencies to manage multiple clients in parallel without overlap. Client workspaces last for the duration of the agency's contract with Profound or an alternative, agreed-upon time period. Client workspaces are typically larger in size and have more prompts, LLMs, regions, and competitors tracked when compared to pitch workspaces. ### Inactive workspaces Inactive workspaces are workspaces no longer operating. These are primarily pitch workspaces that have expired after their set duration. Pitch workspaces are automatically moved to the inactive section of the agency’s landing page, below the pitch workspaces and client workspace tables. If an agency lets a Pitch workspace expire and needs to reactivate it at any point, they can click the “Start a pitch” button on that inactive workspace to use a credit to reactivate it and begin collecting data for another time increment (typically 30 days). ## Agency Mode dashboard All pitch and client workspaces are managed from the Agency Mode dashboard. From this dashboard, all agency users can view active workspaces, see usage of their Profound contract credits, and track pitch workspace expiration timelines. Admin users from the agency also have the ability to create new pitch workspaces or client workspaces if they have workspace credits available on their account. ![Agency Mode Client Management dashboard with Pitch Workspaces, Client Workspaces, and Inactive sections and usage counters](https://mintcdn.com/profound-37face47/J_F2xMhMTt8_rix9/images/agencies/agency-mode-overview-1.png?fit=max\&auto=format\&n=J_F2xMhMTt8_rix9\&q=85\&s=9045a0f2476b233dee65ec9e5a428772) Pitch workspaces can be [extended to move](/agencies/manage-brands#extend-or-end-a-pitch) past expiration. Alternatively, pitch workspaces can [be promoted](/agencies/manage-brands#promote-a-pitch-workspace-into-a-client-workspace)into a full brand workspace when a prospect becomes a client. Changes made to any brand workspace do not affect other client workspaces. This separation reduces operational risk and facilitates scaling as the agency’s client base grows. > [!NOTE] > > Agents and Agent Analytics are only available on Enterprise plans and are not isolated to one workspace. They are configured at the organization level in Profound and the same information is accessible across client and pitch workspaces. ## Track workspace usage and allocations Agencies can track their Profound resource consumption across workspaces from the Agency Mode Dashboard and the Usage dashboard. For agencies on the Agency Growth plan, billing and usage is consolidated under a single account. Enterprise agency partners of Profound handle their billing through their dedicated Profound account team. ## Manage and increase workspace volume After an agency purchases a package of Pitch Workspaces from Profound, agency users who are “Admin” roles in their Profound organization can create new workspaces directly within the Profound agency environment. If you run low on Pitch workspace credits, you can purchase additional workspace packages from Profound. ### Enterprise Agencies that work with a Profound account team can request additional workspace volume directly through their Profound partner. ### Self-Serve Agencies on a Growth plan can contact Profound support to request an increase in workspace volume. ## Agency Mode access Agency Mode is available to agencies on supported plans. Contact your Profound account team to confirm eligibility or enable Agency Mode. Roles are assigned at the agency level. Admins can create new workspaces, extend workspaces that are about to expire, and invite new agency users from their organization. They can also change roles and permissions for existing users. # Manage Your Agency's Brands Source: https://docs.tryprofound.com/agencies/manage-brands Create, configure, and manage pitch and client workspaces in Agency Mode Manage your [Agency Mode](/agencies/agency-mode-overview) pitch and client workspaces from the Agency Mode dashboard. From this dashboard, you can create, configure, and manage separate brand workspaces. > [!NOTE] > > Agency Mode is for marketing agencies and consultancies monitoring multiple brands and clients. This is distinct from Profound's [Agent Analytics](/agent-analytics/overview), which measures how answer engines assess your web presence. ## Access the Agency Mode Dashboard To access the Agency Mode dashboard, click the brand asset dropdown in the upper-left corner of the Profound platform. Select “My Agency” to open the Agency Mode dashboard. ![Brand asset dropdown in the upper-left corner open with the My Agency option highlighted](https://mintcdn.com/profound-37face47/J_F2xMhMTt8_rix9/images/agencies/manage-brands-1.png?fit=max\&auto=format\&n=J_F2xMhMTt8_rix9\&q=85\&s=f9b2567dd0b8d39b82e6e4332de4de4f) ## Create and Manage a Pitch Every prospective client or business development opportunity for an agency should have its own unique [pitch workspace.](/agencies/agency-mode-overview#pitch-workspaces)You can create and manage your pitch workspaces from the pitch workspace table in the Agency Mode dashboard. ### Create a New Pitch Click “Start a pitch” on the right side of the pitch workspace table to open the pitch creation menu. ![Client Management dashboard with the Start a pitch button highlighted in the Pitch Workspaces section](https://mintcdn.com/profound-37face47/J_F2xMhMTt8_rix9/images/agencies/manage-brands-2.png?fit=max\&auto=format\&n=J_F2xMhMTt8_rix9\&q=85\&s=0b7f48df86b4e477f46cd4eca4534967) You can choose to generate workspace prompts using AI or upload them via CSV. Provide the following information, then click “Create Pitch Workspace”: * **Brand Name and Website** - The client’s brand name and primary domain URL. * **Industry** -  The prospective client’s unbranded industry that they operate in. * **Regions** -  The countries the prospective client serves and the language spoken. * This creates prompts in the natural language of the country being tracked. * **Topics** - Key themes that you want to explore with your prospective client. * **Competitors -** The brand names and main website URLs of the prospective client’s key industry competitors. * **Contextual Information -** Additional details used to generate client prompts. * This can be content such as key audiences that you want targeted in the prompt generation, or journeys to reflect. Examples include: * “Prompts should be from the perspective of retail shoppers, and should include a mix of research/awareness, consideration and purchase related prompts across the full funnel.” * “Please include a mix of prompts with some from the perspective of a patient and some from the perspective of a physician, and ensure they focus more on upper- and mid-funnel queries these audiences would ask about the diabetes industry.” **• Prompt Creation Method -** Choose between uploading your own CSV or by using Profound’s prompt generation. > [!NOTE] > > You can edit auto-generated prompts in the [Prompt Designer](/answer-engine-insights/prompt-designer) once the client workspace is set-up. ### Manage Pitch Workspace Prompts To access prompts for a pitch workspace, click the brand name in the pitch workspace table on your Agency landing page. This opens the Prompt Designer for that specific pitch. You can also access the [Prompt Designer](/answer-engine-insights/prompt-designer) from the “Prompts” tab in Answer Engine Insights while inside the brand workspace. ### Promote a Pitch Workspace into a Client Workspace You can expand pitch workspace capabilities by promoting it into a client workspace. Profound recommends promoting any pitch workspace when a prospective customer converts into a paid customer. > [!NOTE] > > Reach out to your Profound account management team or support for help designing the client workspace configuration for your client’s ongoing business needs. Click “Promote” on the right side of the corresponding row in the workspace table to promote a pitch workspace to a client workspace. ![Client Management dashboard with the Promote button highlighted on a pitch workspace row](https://mintcdn.com/profound-37face47/J_F2xMhMTt8_rix9/images/agencies/manage-brands-3.png?fit=max\&auto=format\&n=J_F2xMhMTt8_rix9\&q=85\&s=90766fbd245ddefd7d9ca712ea485296) ### Extend or End a Pitch Click “Extend” on the right side of the corresponding row in the workspace table to extend a pitch workspace. You can extend a pitch for 30 days or for a pre-set time period for pitch workspaces. ![Client Management dashboard with the Extend button highlighted on a pitch workspace row](https://mintcdn.com/profound-37face47/J_F2xMhMTt8_rix9/images/agencies/manage-brands-4.png?fit=max\&auto=format\&n=J_F2xMhMTt8_rix9\&q=85\&s=5cd2b6623eec80a63f13706f8c5dd8fd) Extending a pitch prevents it from expiring and moving into an inactive state, and uses another one of your available credits for pitch workspaces. You [can purchase more workspaces](/agencies/agency-mode-overview#manage-and-increase-workspace-volume)if you do not have any more available. ## Create and Manage a Client Workspace Every client should have its own [client workspace](/agencies/agency-mode-overview#active-client-workspaces), and some clients may require multiple workspaces for different lines of business, product categories, or countries. You can create and manage a client workspace from the client workspace table in the Agency Mode dashboard, or partner with Profound to create the client workspace on your behalf with your inputs. ### Create a New Client Workspace Click “Add a new client” on the right side of the pitch workspace table to open the client workspace creation menu. ![Client Management dashboard with the Add a new client button highlighted in the Client Workspaces section](https://mintcdn.com/profound-37face47/J_F2xMhMTt8_rix9/images/agencies/manage-brands-5.png?fit=max\&auto=format\&n=J_F2xMhMTt8_rix9\&q=85\&s=13ac341d20f4ff2832848cfdfcca53a0) You can determine if you want to generate workspace prompts using AI or alternatively via CSV upload. Input the following parameters and click “Create Client Workspace” to create the workspace: * **Brand Name and Website** - The client’s brand name and primary domain URL. * **Industry** -  The prospective client’s unbranded industry that they operate in. * **Regions** -  The countries the prospective client serves and the language spoken. * This creates prompts in the natural language of the country being tracked. * **Topics** - Key themes that you want to explore with your prospective client. * **Competitors -** The brand names and main website URLs of the prospective client’s key industry competitors. * **Contextual Information -** Additional details used to generate client prompts. * This can be content such as key audiences that you want targeted in the prompt generation, or journeys to reflect. Examples include: * “Prompts should be from the perspective of retail shoppers, and should include a mix of research/awareness, consideration and purchase related prompts across the full funnel.” * “Please include a mix of prompts with some from the perspective of a patient and some from the perspective of a physician, and ensure they focus more on upper- and mid-funnel queries these audiences would ask about the diabetes industry.” * **Prompt Creation Method -** Choose between uploading your own CSV or by using Profound’s prompt generation. ### Manage Client Workspace Prompts As with any Profound workspace, you can manage prompts for a client workspace using the [Prompt Designer](/answer-engine-insights/prompt-designer). ### Remove a Client Workspace If a client ends its longer term engagement with your agency and you need to repurpose the client workspace for a different client, you can reach out to Profound. Profound will consult on how to leverage this client workspace allocation for a different ongoing business need if needed. ## Assess Workspace Usage The Agency Mode dashboard shows how many pitch and client workspaces you are using relative to your allotment or package of each workspace type purchased from Profound. Each row also displays prompt usage for the workspace beneath the brand name, as well as the number of days remaining before a pitch workspace becomes inactive.\ You can increase your workspace allotment by [purchasing more workspaces](/agencies/agency-mode-overview#manage-and-increase-workspace-volume). # Add conditionals to Workflows Source: https://docs.tryprofound.com/agents/how-tos/add-conditionals-to-workflows Direct a Workflow down different paths based on variable values Conditionals are decision points within your Workflow that direct the Workflow down different paths based on variable values. Use a Conditional if a Workflow must operate differently depending on an input or a value generated in a previous step. For example, route workflows to trigger different prompts based on specific user input. ## Add a Conditional Click the **+** icon in the Workflow Builder and select **Conditional**. Alternatively, drag **Conditional** from the node selection menu into the workflow. ![Workflow Builder node picker with the Conditional option highlighted under Logic](https://mintcdn.com/profound-37face47/LU_swtbqvG5kIsMS/images/agents/how-tos/add-conditionals-1.png?fit=max\&auto=format\&n=LU_swtbqvG5kIsMS\&q=85\&s=02d6096eeed2d778b4ff356400c7842c) Conditionals require you to define a condition using a comparison expression (for example: equals, greater than, less than, or contains). If the condition evaluates as true, the Workflow follows the **If true** branch. If not, it follows the **If false** branch. ![Workflow Builder with a Conditional node showing If true and If false branches and the condition settings panel](https://mintcdn.com/profound-37face47/LU_swtbqvG5kIsMS/images/agents/how-tos/add-conditionals-2.png?fit=max\&auto=format\&n=LU_swtbqvG5kIsMS\&q=85\&s=b2f8d6fd68068dc707dfecb656d16d94) Each branch can contain its own sequence of steps. ## Configure conditions When configuring a Conditional, select: * The variable to evaluate * The evaluation operator (equals, greater than, less than, and so on) * The value to compare it against Select **+ Add Condition** to add multiple conditions to the same branch. Multiple conditions can be combined using **AND** (all conditions must be true) or **OR** (at least one condition must be true). When multiple conditions are configured, all must be satisfied for the Workflow to follow the **If True** branch. ![Conditional node settings with two number conditions joined by AND and the Add condition button highlighted](https://mintcdn.com/profound-37face47/LU_swtbqvG5kIsMS/images/agents/how-tos/add-conditionals-3.png?fit=max\&auto=format\&n=LU_swtbqvG5kIsMS\&q=85\&s=6c7e2d049f05dbec70914ec87ec6eb3f) If the conditions are not satisfied, the Workflow automatically follows the **If false** branch. ## Conditional branch requirements There are several requirements to ensure a Workflow executes as expected: * The variable used in a condition must exist and must be created in a previous step * Both branches must ultimately lead to an **End** step to complete the Workflow run * The evaluation operator must align with the input variable type: * Numerical operators only work with numeric values. For example, **greater than** will not work on a string such as "Best AEO Tools" * String operators only work on text strings. For example, **contains** will not work on a numeric value of 126 # Add iterations to Workflows Source: https://docs.tryprofound.com/agents/how-tos/add-iterations-to-workflows Loop a Workflow through a list and run the same steps for each item ## Overview The Iteration node loops through a list within a Workflow, executing the same sequence of steps for each item automatically. By default, a Workflow processes a single input and produces a single output. The Iteration node extends this by applying the same process across an entire list, taking multiple inputs and producing multiple outputs within a single Workflow run. Use an Iteration node when a Workflow must perform a repeated action across multiple values, such as running an LLM prompt for each item in a list of keywords or URLs. Examples include: * Analyzing a list of URLs to identify common themes in their content and structure, then optimizing an owned piece of content accordingly. * Collecting prompt responses across multiple answer engines, regions, or topics and conducting bulk analysis on brand and product mentions to surface trends. * Iterating over a list of Reddit threads to generate a clean report on top narratives and recurring themes. ## Add an Iteration node Select the **+** icon in the Workflow Builder and select **Iteration**. Alternatively, drag **Iteration** from the node selection menu into the workflow. ![iterations-1.png](https://mintcdn.com/profound-37face47/LU_swtbqvG5kIsMS/images/agents/how-tos/add-iterations-1.png?fit=max\&auto=format\&n=LU_swtbqvG5kIsMS\&q=85\&s=e27ce5af180c5721a5fe148b19f6e95e) Iterations require a list of items as the input. The node loops through each item sequentially, passing the current item as a variable to the steps inside the loop. ## Configure an Iteration node Configuring an Iteration node requires two things: passing in a list, and building the steps that execute on each iteration. The node contains its own self-contained editor, modeled after the broader Workflow Builder. ![Iterations\_3.png](https://mintcdn.com/profound-37face47/LU_swtbqvG5kIsMS/images/agents/how-tos/add-iterations-2.png?fit=max\&auto=format\&n=LU_swtbqvG5kIsMS\&q=85\&s=98f7f07319d8529b582fcaa9fe40842d) ### Iterate Over a List Input An Iteration node requires a list as your Workflow input. To configure a list input, select the input node, add a new input, and choose **List** from the dropdown. ![Iterations\_2.png](https://mintcdn.com/profound-37face47/LU_swtbqvG5kIsMS/images/agents/how-tos/add-iterations-3.png?fit=max\&auto=format\&n=LU_swtbqvG5kIsMS\&q=85\&s=a08f95d8f6866ef8cad9bcb46ac429f0) ### Configure your Iteration node Select the node to open the node settings menu, then select the list input as the value to iterate on. The output of an Iteration node defaults to the outputs of the last node within it. ### Add your Iteration steps Add nodes to the Iteration node the same way you add nodes to the Workflow Builder. Select the **+** icon in the Iteration editor and select a node, or drag a node in from the node selection menu. > [!TIP] > > Each step repeats for every item in the list. Place any node that should run only once outside the Iteration editor. ### Structure your output Add output fields to map your final results when using the Prompt LLM node. In your LLM prompt, specify what information should populate each field, for example, "*Return each URL in the* `urls` *output field.*" Then add those same fields as structured output fields in the node settings. ![Screen Shot 2026-04-26 at 8.24.04 PM.png](https://mintcdn.com/profound-37face47/LU_swtbqvG5kIsMS/images/agents/how-tos/add-iterations-4.png?fit=max\&auto=format\&n=LU_swtbqvG5kIsMS\&q=85\&s=e7053239f50b1ea112f7912b2ee43b6b) ## Iteration node requirements There are several requirements to ensure a Workflow executes as expected: * The list variable used as input must exist and must be created as a Workflow input using the list type. * The current item variable is only accessible within the steps inside the loop and cannot be referenced in steps outside the Iteration node. * Steps inside the loop execute once per item in the list. * The Iteration node must connect to an End step or additional steps to complete the Workflow run. # Migrate a Workflow to an Agent Source: https://docs.tryprofound.com/agents/how-tos/migrate-workflow-to-agent Turn an existing Workflow into an Agent with AI Marketer (Aim) Migration turns an existing node-based Workflow into an Agent. AI Marketer (Aim) reads the nodes in your Workflow and writes an Agent with equivalent instructions, tools, and outputs. Your Workflow isn't changed, so you can compare the two and switch over when you're ready. ## Why migrate? Migrate your Workflows to Agents if you want: * **Easier updates:** describe the change in the Agent's chat and Aim makes it. * **Triggers beyond a schedule:** web monitors, Profound data changes, and app events such as Slack messages. Learn more in [Triggers in Agents](/agents/triggers-in-agents). * **Flexibility with unexpected inputs and fewer broken runs:** the Agent reasons through the run and works around common issues. Migration is optional. Agents don't affect your existing Workflows; they keep running as they are. ## Before you migrate * **Check the tools.** Some integrations available to Workflows aren't available to Agents as tools yet. Note the tools your Workflow uses and compare them against the list in [Tools in Agents](/agents/tools-in-agents). If a tool is missing, consider running the Workflow from an Agent instead. * **Check the credit cost.** Once credit billing for Agents starts, an Agent run uses more credits than the same Workflow run, because Aim reasons through each step. Keep high-volume, fixed tasks as Workflows. * **Save an example of good output.** Use it to judge the migrated Agent's first run. ## Migration steps **1. Start the migration** 1. In Profound, go to **Agents** in the left sidebar and filter by **Type** to find the Workflow you want to migrate. 2. Select the Workflow to open it. 3. Select **Migrate** at the top right of the screen. In the **Migrate to the new Agents experience?** dialog, select **Migrate**. Profound creates a new Agent and opens its page, where Aim starts the migration in the chat. **2. Review the Agent** After Aim drafts the Agent, review what it did in the settings panel and in the chat: * **Reasoning:** the Agent is Aim's interpretation of the Workflow, so the instructions and steps won't map one-to-one. Read Aim's reasoning and decisions in the chat. * **Instructions:** read the new Agent instructions end to end. Check that filters, date ranges, and prompt wording from the Workflow stayed the same. Fix anything that doesn't sound right in the instructions editor or by asking Aim. * **Tools:** Aim adds a tool for each integration it can match. If it can't find a match, it offers workaround options. * **Inputs and outputs:** confirm the inputs are unchanged and the output type (Document, Sheet, HTML, CSV, or PDF) matches what you expect. **3. Run the Agent** Select **New run** and give the Agent the same inputs you'd give the Workflow. Compare the result with your saved output example. Expect differences in wording and order, because an Agent reasons through the steps instead of following nodes. Ask Aim in the same chat for changes, and run the Agent again until the output is right. Changes apply right away. **4. Add triggers** 1. In the settings panel, select **Add** next to **Run triggers** and add a Schedule trigger that matches your Workflow's schedule, or try another trigger if it suits the task better. 2. Make sure the switch next to **Run triggers** is on. The Agent now runs on its own. When you're ready, remove the schedule from the Workflow so the task doesn't run twice. ## FAQ > **Can I migrate several Workflows at once?** > > No. Migrate one at a time so you can check each result. > **The migrated Agent gives different numbers from the Workflow** > > Check that the instructions state the same category, asset, date range, and filters as the original nodes. If your Workflow uses fixed calculations or tools that aren't available to Agents yet, keep it as a Workflow, and add it to an Agent's instructions if you want the Agent to run it as a step. > **Can I migrate back?** > > No. Migration is one-way, but it keeps your original Workflow. If the migrated Agent doesn't work for you, keep using the Workflow. # Prompt LLM Workflow node best practices Source: https://docs.tryprofound.com/agents/how-tos/prompt-llm-best-practices How to write prompts that get the most out of the Prompt LLM node in Workflows The [**Prompt LLM node**](/agents/workflows/nodes/prompt-llm) is one of the most powerful tools in the Workflow Builder. It lets you turn raw inputs (research, scraped content, user data, or Profound insights) into clear, useful outputs such as summaries, outlines, rewrites, analyses, and structured responses. This guide teaches you how to write highly effective prompts *without any background in prompt engineering*. ### Why good prompts matter Large Language Models (LLMs) are excellent pattern recognizers, but they need direction. A well-written prompt helps the model understand: * **What task** to perform * **How** to perform it * **What style or format** to use * **What constraints** to follow The clearer your instructions, the more accurate and repeatable your output will be. Think of prompts as creative briefs for the AI: the more context you give, the better the work. ### The core structure of an effective prompt Most great prompts follow this simple structure (but don't have to): 1. **Role**: who or what should the model act as? 2. **Task**: what should it produce? 3. **Context**: what information should it use? 4. **Requirements**: rules, guidelines, constraints 5. **Output format**: how the result should be structured Below is an example prompt written with this structure: ```text expandable wrap theme={null} You are an expert content strategist. Summarize the following research into 5 concise insights for a B2B marketing audience. Context: {{Web Page Scrape Output}} Requirements: - Focus only on key trends - Avoid duplicate points - Keep each insight under 20 words Output Format: - Bullet points only ``` This structure works across nearly every type of prompt you write in Profound. ### The 5 elements of strong prompts #### 1. Give the model a role (optional but helpful) LLMs perform better when given a defined perspective to write from. Examples: * “You are a senior SEO strategist who writes in a professional, concise tone.” * “Act as a technical explainer for a non-technical audience.” Assigning a role shapes the voice and decision-making of the model. #### 2. Be explicit about the task Ambiguous instructions lead to unpredictable results. Weak: > “Write something about this.” Strong: > “Rewrite the following paragraph to be clearer and more concise, while keeping the core meaning.” Even stronger: > “Rewrite the following text for a C-suite B2B audience. Reduce fluff. Improve clarity. Keep all data accurate.” #### 3. Provide context The Prompt LLM node can reference any previous step with `/` variables. Good context sources include: * Web Page Scrape * YouTube Transcript * Research Snippets * Perplexity Search results Include only relevant context, too much noise reduces quality. Example: ```text wrap theme={null} Based only on this content: {{YouTube Video Transcript Output}} ``` ### 4. Add clear requirements and constraints This is where you shape the output to your needs. Common constraints marketers use: * **Tone:** professional, friendly, authoritative, neutral * **Length:** 3 bullets, 100 words, 1 paragraph * **Audience:** B2B marketers, enterprise executives, small business owners * **Content rules:** no jargon, avoid repetition, do not invent facts * **Brand style:** simple, direct, value-driven Example: ```text wrap theme={null} Requirements: - Keep introduction under 50 words - Do not invent data or statistics - Avoid phrases like “in today’s world” ``` ### 5. Specify the format of the output LLMs are much more accurate when you tell them exactly what shape the output should take. Examples: * Bullet list * JSON * Table * One-paragraph summary * Step-by-step instructions * Title + 3 subtitles + CTA Example prompt: ```text wrap theme={null} Return your answer in JSON with fields: - insight - supporting_quote - source_url ``` ## Prompt patterns you can use right away Below are reusable templates tailored for common marketing Workflows. ### 1. Summarize content ```text expandable wrap theme={null} Act as a senior content strategist. Summarize the key points from the text below for a B2B marketing audience. Context: {{Perplexity Search Output}} Requirements: - Provide 5 bullet points - No more than 20 words per point - Avoid repetition - No fluff Output format: Bullet list only. ``` ### 2. Rewrite for clarity or tone ```text expandable wrap theme={null} Rewrite the following text to be clearer, more direct, and suitable for an enterprise executive audience. Context: {{Web Page Scrape Output}} Requirements: - Remove jargon - Keep factual accuracy - Shorten sentences where possible Output format: One clean rewritten paragraph. ``` ### 3. Generate titles or headlines ```text expandable wrap theme={null} Generate 10 high-performing article titles based on the topic below. Topic: {{topic}} Guidelines: - Clear, crisp, compelling - Avoid clickbait - Include a strong, specific angle - Keep under 60 characters when possible Output format: Numbered list. ``` ### 4. Extract structured data ```text expandable wrap theme={null} Extract key insights from the content below. Context: {{YouTube Video Transcript Output}} Requirements: - Identify 3 themes - For each theme, provide a 1-sentence explanation and a supporting quote (if available) Output format (JSON): [ { "theme": "", "summary": "", "quote": "" } ] ``` ### 5. Compare or evaluate content ```text expandable wrap theme={null} Act as a content analyst. Compare the strengths and weaknesses of two competitor pages. Context A: {{Web Page Scrape Output A}} Context B: {{Web Page Scrape Output B}} Requirements: - Identify 3 strengths and 3 weaknesses for each page - Keep explanations under 15 words Output format: A table with columns: Page, Strength, Weakness. ``` ### Tips for getting consistently better outputs #### ✔ Tell the AI what to avoid Hallucinations decrease significantly when you include rules like: * “Do not add facts that are not in the context.” * “If information is missing, say ‘Not enough information’.” #### ✔ Use examples “Show, not tell” is extremely effective. ```text wrap theme={null} For example, a good headline looks like: - “How AI Improves Inventory Forecasting” - “The Future of Predictive Supply Chains” ``` #### ✔ Keep prompts short, but not vague Overly long prompts can confuse the model. Overly short prompts give it no direction. Aim for **3–8 sentences** + **one format block**. #### ✔ Iterate and refine Try one prompt, review the output, and refine it. Prompt writing is like briefing a writer. #### ✔ Use variables to make prompts dynamic This is especially helpful when building scalable Workflows. Example variable-driven prompt: ```text wrap theme={null} Summarize the following content for an audience of {{audience_segment}}. Context: {{Web Page Scrape Output}} ``` ### Common mistakes and how to avoid them #### ✖ Asking the AI to “write something good” → Too vague. Always specify *what* makes it good. #### ✖ Forgetting to restrict the source → AI will make things up unless you say “Use only the context provided.” #### ✖ No format specified → Results become inconsistent and hard to work with in Workflows. #### ✖ Too many goals in one prompt → Split complex tasks into sequential Prompt LLM nodes for cleaner outputs. ### Advanced prompt writing (optional) For users who want more precision: * **Chain of Thought:**\ “Explain your reasoning step-by-step, but only return the final answer.” * **Transform → Evaluate → Improve loops:**\ Create a second Prompt LLM node to critique and refine the first output. * **Zero-shot vs. few-shot prompting:**\ Providing “example outputs” dramatically improves accuracy. ### Example: full high-quality prompt template ```text expandable wrap theme={null} You are an expert B2B content strategist. Rewrite the article below so it is clearer, more scannable, and optimized for AI-answer performance. Context: {{Generate Article Output}} Goals: - Improve clarity and remove fluff - Strengthen section headers - Ensure each section answers a real user intent - Maintain accuracy; do not add unsupported facts Output Format: Return: 1. A revised article 2. A bullet list of the key improvements you made Style: - Professional, concise, and trustworthy ``` ### Final thoughts Prompt writing is a skill that compounds over time. You don't need to be a "prompt engineer." You simply need to: * Be clear * Be specific * Provide context * Give constraints * Define the output format With these techniques, you'll consistently generate strong, predictable results with the Prompt LLM node, unlocking everything from content summaries to fully automated content production pipelines. # Call API node Source: https://docs.tryprofound.com/agents/workflows/nodes/call-api Connect a Workflow to any external API endpoint The **Call API** node connects your Workflow to any external API endpoint. Use this step to retrieve data, trigger external services, enrich Workflow inputs, or integrate with your internal systems and tools. This node supports both **GET** and **POST** requests, optional authentication, and (for POST requests) request bodies in JSON format. ![call api.png](https://mintcdn.com/profound-37face47/LU_swtbqvG5kIsMS/images/agents/nodes/call-api-1.png?fit=max\&auto=format\&n=LU_swtbqvG5kIsMS\&q=85\&s=d7ebced3d931337a4f07d806de54557f) ## When to use this node Use Call API for tasks such as: * Pulling data from third-party tools, CRMs, CMS systems, or analytics platforms * Triggering external automations or Workflows * Fetching structured data for use in downstream LLM steps * Enriching Workflow execution with custom business logic hosted elsewhere * Integrating Profound Workflows with internal APIs or microservices ## Node configuration Selecting the Call API node opens its configuration panel on the right side of the Workflow Builder. ### Method (required) Choose the HTTP method for the request: * **GET** – Retrieve data from an API endpoint * **POST** – Send data to an endpoint; allows including a request body Choose the method that matches the API you are calling. ### URL (required) Enter the full API endpoint URL. You can: * Paste a static URL * Dynamically insert variables using `/`, referencing inputs or earlier Workflow steps Examples: * `https://api.example.com/users/{{user_id}}` * `https://internal.mycompany.com/search?q={{topic}}` ## Additional configuration for POST requests If the method is **POST**, additional fields appear. ### Request Body Enter the JSON payload to send in the request. This is required for POST requests. Example payload: ```text expandable wrap theme={null} { "userId": 1234 "action": "create", "payload": { "firstName": "Jack", "email":"jack@example.com" } } ``` Variables can be inserted using `/`. ### Content Type (required for POST) Choose the content type for the request body: * **None** * **Application/Json** Most APIs expect `application/json`. ## Output Label Provide a descriptive label for the API response. This becomes the variable name that downstream nodes reference. Examples: * `api_response` * `user_record` * `external_data` ## Advanced settings Select **Advanced settings** to configure authentication for the request.\ Authentication is required for APIs that are not publicly accessible. ### Authentication Type (required) Choose the authentication mechanism: * **None** – no authentication * **Basic** – username and password * **Bearer** – bearer token * **API Key** – custom API key header Each option exposes different required fields. #### Basic Authentication Fields: * Username * Password #### Bearer Authentication Fields: * Bearer Token #### API Key Authentication Fields: * Header Name * API Key Value Example: * Header Name: `X-API-Key` * API Key Value: `` Use the field names expected by the API you are calling. ## Output The Call API node returns the full response body from the API as text. This output can be passed into: * LLM steps for parsing, extraction, or summarization * Logic and transformation nodes * Downstream API calls * Any step requiring structured or semi-structured external data The output may be JSON, HTML, plain text, or any content type returned by the API. ## Example usage ### 1. Fetch user profile data 1. Add a **Call API** node with: * Method: GET * URL: `https://api.example.com/users/{{user_id}}` * Output Label: `user_profile` 2. Pass \{\{user\_profile}} into an LLM step for analysis or transformation. ### 2. Submit Workflow data to an external service 1. Add a **Call API** node with: * Method: POST * URL: `https://hooks.example.com/events` * Content Type: Application/Json ```text wrap theme={null} Request Body:{ "transcript": "{{video_transcript}}",  "summary": "{{summary}}" } ``` * Output Label: `event_response` ### 3. Use authenticated APIs 1. Under **Advanced settings**, choose the appropriate authentication type. 2. Provide credentials (e.g., Bearer Token or API Key). 3. Use GET or POST as needed to retrieve secure data. ## Best practices * Always verify the API’s expected method, headers, payload structure, and authentication requirements before configuring the node. * Use variables to dynamically build URLs or request bodies for more flexible Workflows. * When sending JSON, ensure proper formatting: malformed JSON will cause the request to fail. * Keep output labels descriptive, especially when chaining multiple API calls. ## Troubleshooting ### The API returns an error Check: * URL correctness * Required query parameters * Authentication credentials * JSON body structure (for POST) ### The response is empty or unexpected APIs may return HTML error pages or wrapper objects. Use a Prompt LLM step to interpret or extract relevant portions. ### Variables aren’t resolving Insert variables by typing `/` and selecting from the variable picker. # Get Sitemap node Source: https://docs.tryprofound.com/agents/workflows/nodes/get-sitemap Build a complete sitemap of any publicly accessible website The **Get Sitemap** node builds a comprehensive sitemap for any publicly accessible website. It returns a structured list of all discoverable URLs, giving you a complete view of a site's content footprint. This is useful for research, content audits, competitive analysis, content planning, and feeding large sets of URLs into downstream Workflow steps. Behind the scenes, this node uses Firecrawl's sitemap and site-mapping capabilities to crawl a domain and return a clean, deduplicated list of URLs, but the process is fully abstracted for you inside Profound. ![Frame 2147259079 (3).png](https://mintcdn.com/profound-37face47/LU_swtbqvG5kIsMS/images/agents/nodes/get-sitemap-1.png?fit=max\&auto=format\&n=LU_swtbqvG5kIsMS\&q=85\&s=8f28e6d38d90365edfb8bbac595c60d3) ## When to use this node Use **Get Sitemap** when you want to: * Audit all URLs on your own site or a competitor’s * Identify content gaps or opportunities for AEO * Build Workflows that automatically analyze or summarize entire sites * Retrieve source URLs for bulk scraping, bulk insights, or large-scale content research * Feed multiple URLs into LLM steps for comparison, clustering, or extraction * Conduct technical/SEO reviews or map site hierarchy This is a foundational node for building AEO-aware research pipelines. ## Node configuration ### Website URL (required) Enter the base URL of the website you want to map. Examples: * `https://example.com` * `https://www.competitor-site.com` * `https://docs.example.com` The node will crawl the domain starting from this URL and attempt to discover all reachable pages. You can type the URL directly or use `/` to insert variables from earlier Workflow steps. ### Output Label Provide a name for the node's result, such as: * `sitemap` * `site_urls` * `mapped_pages` This label will reference the sitemap output in later steps. ## Advanced settings Expand **Advanced settings** to configure crawl depth and filtering. ### Search Query Allows you to filter the sitemap results by keyword. Examples: * `blog` * `pricing` * `case-study` * `ai` This is helpful when you only want URLs matching a specific topic or section of the site. ### Maximum Results Limits the number of URLs returned.\ Default: **100** Set this higher or lower depending on your use case: * **100–500** for competitive research * **500–2,000** for large content audits * **10–50** for quick sampling or lightweight Workflows ## Output The node returns a structured list of URLs in a clean, machine-readable format.\ Each entry typically includes: * The page URL * Basic metadata discovered during crawling * Normalized and deduplicated links This output can be consumed directly by: * [Web Page Scrape node](/agents/workflows/nodes/web-page-scrape) * [Perplexity Search node](/agents/workflows/nodes/perplexity-search) * [Prompt LLM node](/agents/workflows/nodes/prompt-llm) * [Profound data nodes](/agents/workflows/nodes/data/visibility-score) * Custom analysis or extraction steps ## Example usage ### 1. Build a full competitor content audit 1. Add **Get Sitemap** with `https://competitor.com` 2. Feed output into [Web Page Scrape](/agents/workflows/nodes/web-page-scrape) using a loop or batched Workflow 3. Analyze patterns using [Prompt LLM](/agents/workflows/nodes/prompt-llm)​ (e.g., topics, structure, gaps) 4. Generate a research report or summary ### 2. Identify content gaps for AEO 1. Use **Get Sitemap** to list all pages on your site 2. Use [Citation Pages](/agents/workflows/nodes/data/citation-pages) to see which pages are cited 3. Use [Prompt LLM](/agents/workflows/nodes/prompt-llm) to identify pages **not** appearing in answer engines 4. Generate recommendations or content improvements ### 3. Large-scale content generation 1. Retrieve a site’s URLs 2. Filter using the Search Query field (e.g., `/blog`) 3. Feed selected URLs into a [Create Content Brief](/agents/workflows/nodes/content-creation/create-content-brief) or [Generate Article](/agents/workflows/nodes/content-creation/generate-article) chain 4. Produce updated or derivative content at scale ## Best practices * Start with a reasonable limit (e.g., 200 URLs) before scaling up, especially for large sites. * Use **Search Query** to narrow results when you only need a subset of the content. * Combine with [Prompt LLM](/agents/workflows/nodes/prompt-llm) to cluster or categorize URLs. * For large enterprise websites, run multiple Get Sitemap nodes with different starting URLs (e.g., `/blog`, `/products`, `/docs`). * Use descriptive output labels when chaining multiple sitemap operations. # Human Review node Source: https://docs.tryprofound.com/agents/workflows/nodes/human-review Add a step where a person approves, rejects, or edits a Workflow's output before the run continues The Human Review node adds a review step inside a Workflow. Use it when a person needs to approve, reject, or edit a Workflow's output before the run continues. ![Screenshot 2026-07-30 at 12.38.43 pm.png](https://mintcdn.com/profound-37face47/LU_swtbqvG5kIsMS/images/agents/nodes/human-review-1.png?fit=max\&auto=format\&n=LU_swtbqvG5kIsMS\&q=85\&s=6b72b0b3c9185fa9f0d23342fafcd87d) ## When to use this node Use the Human Review node for tasks such as: * Reviewing AI-generated content before publishing * Sending generated ads, claims, or messaging to a legal or compliance reviewer before they go live * Approving a content brief, then generating the article from the approved version ## Limitations * The Human Review node **works only with text or string values** and doesn't support lists, numbers, or other variable types. * The node doesn't work with the [Iteration node](/agents/how-tos/add-iterations-to-workflows). However, it can run in [Sheets](/sheets/getting-started), and multiple Human Review nodes can run sequentially within the same Workflow. ## Configuration ### Review mode (required) Choose what the reviewer can do: * **Review only**: the reviewer approves or rejects the output to continue or cancel the run. * **Review with edits**: the reviewer can edit the output before approving. ### Instructions for Reviewer (optional) Add guidance for the person reviewing this step. ### Content to Review (required) In the dropdown menu, select the variable that holds the content you want reviewed. ### Reviewer (required) Choose who can review the step: * **Any member can review**: any workspace member can respond, and the first response completes the review. * **Current user**: only the person who runs the Workflow can review. To other team members, the Workflow appears in a waiting state. ### Output label (required) Enter a descriptive label for this step's output, such as `reviewed_output` or `approved_brief`, or keep the default. ## Output The node returns the reviewed result as text. In **Review only** mode, this is the approved output. In **Review with edits** mode, this is the reviewer's edited version. The run pauses at this step until the reviewer responds, then continues on approval. On rejection, the run stops and appears as failed in **Past runs**. ## Example use case: Approve the article content before publishing it to your Wordpress site 1. Add the node that generates your content, such as [Generate Article](/agents/workflows/nodes/content-creation/generate-article). 2. Add a **Human Review** node. In **Content to review**, select the generated content from step 1. Set Output label to `approved_content`. 3. Add a [WordPress](/integrations/wordpress/overview) - Create Post node that publishes `approved_content` to your WordPress site if the changes are approved. ## Best practices * **Place this node before publishing**. Add it before any step that publishes or applies changes, so nothing goes live without review. * **Write clear reviewer instructions**. The reviewer may not know what the Workflow is doing. Clear instructions help them understand what's needed and respond quickly. * **Chain Human Review nodes.** When you use **Review with edits** to request content edits from a team member, add a second Human Review node set to **Current user** so you can check the changes before handing control back to the Workflow. ## FAQ ### How do my team members know if they need to review something? For now, the Workflow run page is the only place to check for pending reviews. Notifications for pending reviews are in development. As a workaround, add a Slack, Gmail, or other messaging node right before the Human Review node to tell your team to check the Workflow run. ### Does a Workflow run paused for review have a timeout? No. The run stays paused until the review is complete. ### How do I stop or cancel a paused Workflow run? If you created the Workflow that's asking for a review, stop the run by selecting **Stop** on the published Workflow page. If you're a team member who didn't create the Workflow, cancel the run by rejecting the review (**Start Review** > **Reject**) on the published Workflow page. ### Can I request more than one person for the review? No, each node has only one reviewer. To collect reviews from multiple team members, chain Human Review nodes sequentially. # Perplexity Search node Source: https://docs.tryprofound.com/agents/workflows/nodes/perplexity-search Run a Perplexity-powered web search and return a citation-backed answer The **Perplexity Search** node runs a Perplexity-powered web search and returns a detailed, citation-backed answer. Use this step when you need synthesized research, verified facts, or aggregated insights from multiple reputable sources. This node is useful for Workflows that require high-quality search results before passing the information into LLM steps, analyses, or downstream transformations. ![Perplexity Search Node](https://mintcdn.com/profound-37face47/LU_swtbqvG5kIsMS/images/agents/nodes/perplexity-search-1.png?fit=max\&auto=format\&n=LU_swtbqvG5kIsMS\&q=85\&s=421b2c1c2d20d28864b438bd13e1d8be) ## When to use this node Use Perplexity Search for tasks such as: * Gathering up-to-date information about a topic, product, company, or trend * Performing competitive analysis or market research * Extracting factual answers supported by citations * Enriching Workflows that rely on current web data prior to LLM processing ## Node configuration Selecting the Perplexity Search node opens its configuration panel on the right side of the Workflow Builder. ### Model Choose the Perplexity model used to process the query. Available options may differ in speed, reasoning depth, and output quality: * **Sonar** * **Sonar Pro** * **Sonar Reasoning** * **Sonar Reasoning Pro** * **Sonar Deep Research** Select a model appropriate for the complexity and depth of the research needed. ### Prompt Enter the query or instruction you want Perplexity to research.\ You can type text directly or insert variables from earlier Workflow steps by typing /. Examples: * “What are the latest pricing updates for HubSpot Enterprise?” * “Summarize the top three competitors to \{\{brand\_name}} and provide source links.” ### ### Output Label Assign a descriptive label to this step’s output. The label becomes the variable name available to later nodes. Examples: * `perplexity_answer` * `research_summary` * `competitive_insights` ## Output This node returns a single structured text output containing Perplexity’s synthesized answer, including citations to the underlying sources. The output can be passed directly into steps such as: * Prompt LLM * Answer comparison or scoring Workflows * Additional research steps * API calls or data extraction logic ## Example usage ### 1. Run a research query and summarize with LLM 1. Add a **Perplexity Search** step with a prompt such as:\ “Explain the latest changes to Google’s AI Overviews and cite sources.” 2. Add a [Prompt LLM node](/agents/workflows/nodes/prompt-llm) step: ```text wrap theme={null} Summarize the following research into 5 bullet points and highlight any implications for SEO: {{perplexity_search.output}} ``` ### 2. Dynamically research competitor information 1. Pass a brand name into the Workflow as an input. 2. Use Perplexity Search:\ “Provide a competitor overview for \{\{brand\_name}} with citations.” 3. Use the output to generate analysis or comparisons downstream. ## Best practices * Provide clear, specific prompts to get more accurate citations and structured outputs. * Use more advanced models (e.g., **Sonar Reasoning Pro** or **Sonar Deep Research**) for complex or multi-step research queries. * Combine Perplexity Search with Prompt LLM steps to refine, structure, or format the research for your use case. ## Troubleshooting ### Output lacks depth or detail Try switching to a higher-tier model such as Sonar Pro or Sonar Deep Research. ### Variables are not recognized in the prompt Type `/` in the prompt field to insert supported Workflow variables. ### Returned information seems outdated Reframe the query to explicitly request the most recent updates or year-specific results. # Prompt LLM node Source: https://docs.tryprofound.com/agents/workflows/nodes/prompt-llm Generate text with a large language model from a custom prompt inside a Workflow The **Prompt LLM** node allows you to generate text using a large language model (LLM). Use this step when you need an AI-generated summary, classification, rewrite, extraction, or any other transformation based on a custom prompt. You can insert variables from previous steps into the prompt, enabling dynamic responses that adapt to your Workflow's inputs and outputs. ![Frame 2147259079 (1).png](https://mintcdn.com/profound-37face47/LU_swtbqvG5kIsMS/images/agents/nodes/prompt-llm-1.png?fit=max\&auto=format\&n=LU_swtbqvG5kIsMS\&q=85\&s=5295eb815bbff82544e06594d595467c) ## When to use this node Use the Prompt LLM node for tasks such as: * Summarizing search results or scraped content * Drafting responses or structured outputs for further processing * Extracting entities or insights from text * Rewriting content for a specific audience or format * Converting unstructured data into structured fields (e.g., JSON, bullet points) ## Node configuration Selecting the Prompt LLM node opens its settings panel on the right side of the Workflow Builder. The node includes the following configuration fields. ### AI Model Choose which model you want to generate the output. You can switch models at any time while designing the Workflow. The selected model determines output quality, speed, and cost. ### Prompt Write the instruction you want the model to follow. This is the core input that determines how the LLM will behave. You can: * Type plain text instructions * Reference Workflow inputs * Insert variables from previous nodes by typing / to open the variable picker Prompts can be short or detailed. For best results, provide explicit instructions about tone, structure, output format, or constraints. > [!TIP] > > Check out our [Prompt LLM best practices](/agents/how-tos/prompt-llm-best-practices) guide for tips on writing better prompts. ### Use Skill Toggle this option to apply an existing product skill to text generation. ### Use Knowledge Base Toggle this option if you want an LLM to use the information in your Knowledge Base for the task. Once toggled, select the entire Knowledge Base from the dropdown, or select specific folders in the retrieval settings menu. > [!TIP] > > Learn more about Knowledge Bases in [Knowledge Bases and Brand Kits](/context-manager/knowledge-bases-and-brand-kits). ### Structured Output Define a JSON schema for the LLM response: add fields, define their data types (string, number, boolean, or list), and give them concise descriptions. This is particularly useful when working with Sheets. Learn more in the [Get started with Sheets](/sheets/getting-started) guide. ### Output Label Enter a descriptive label for this step’s output. The label you provide becomes the variable name accessible in later Workflow steps.\ Examples: * `analysis_summary` * `buyer_intent_score` * `cleaned_text` ## Output The Prompt LLM node produces a single text or JSON output containing the LLM’s response. This output can be passed to downstream nodes such as: * Additional Prompt LLM steps * API calls * Profound data processing nodes * Iteration node ## Example usage Below are common examples of how the Prompt LLM node may be used in Profound Workflows. ### 1. Summarize a scraped webpage 1. Add a **Web Page Scrape** step. 2. Add a **Prompt LLM** node. 3. In the prompt, reference the scraped page content: ```text wrap theme={null} Summarize the key themes from the following webpage content in 5 bullet points: {{web_page_scrape.content}} ``` 4. Set the Output Label to `summary`. ### 2. Extract entities from an answer engine result 1. Use [**Profound data nodes**](/agents/workflows/nodes/data/visibility-score) **​** to gather inputs. 2. Add a **Prompt LLM** step to extract structured information: ```text wrap theme={null} Extract the brand mentioned in this answer and return JSON: {"brand": ""} Content: {{answer.text}} ``` 3. Use the resulting JSON output in downstream conditional logic. ### 3. Rewrite content for a specific audience ```text wrap theme={null} Rewrite the following text for a B2B marketing leader, keeping it concise and professional: {{input_text}} ``` ## Best practices * **Be explicit.** LLMs respond more reliably to detailed instructions. * **Define expected formats.** Use bullet points, JSON, tables, or specific phrasing to control output structure. * **Reference only what you need.** Avoid passing unnecessarily large content blocks unless required for the task. * **Name outputs clearly.** Good labels make Workflows easier to maintain and reuse. ## Troubleshooting ### The output is not in the format I expected Add explicit instructions such as: * “Reply only in JSON.” * “Provide exactly three bullet points.” * “Do not include explanations.” ### Variables do not appear in the prompt Type `/` while your cursor is in the Prompt field to open the variable picker. ### Output seems incomplete or cut off Try switching to a larger model, or revise the prompt to request shorter, more structured outputs. # Article Research Report node Source: https://docs.tryprofound.com/agents/workflows/nodes/research/article-research-report Produce a structured, multi-source research report with citations for a topic The **Article Research Report** node performs deep, multi-source research and produces a structured research report with citations, insights, and synthesized key findings for your chosen topic. This report is designed to serve as **reference material**—not an article itself—supporting strategists, writers, and downstream content-generation Workflow nodes with authoritative, verifiable information. Unlike the [Research Snippets Generator node](/agents/workflows/nodes/research/research-snippets-generator)(which extracts factual snippets), the Article Research Report node creates a **full narrative research summary**, typically 800–1300 words, complete with inline citations and a reference list. ## When to use this node Use the Article Research Report when you need: * A comprehensive research foundation before writing a content brief or article * A narrative-format summary of key findings across many sources * A detailed explanation of trends, themes, frameworks, or definitions * A fact-rich report used to educate subject-matter experts or content teams * AEO-aligned supporting material to ground downstream content generation This node is ideal for workflows where accuracy, context, and depth matter. ## Node configuration Selecting the Article Research Report node opens its configuration panel on the right side of the Workflow Builder. ### Article Title (required) The article title or topic the research should focus on, for example: * “Emerging trends in healthcare technology” * “How AI is transforming supply chain management” * “Cybersecurity risks in financial services” This title guides the search queries and synthesis. ### Audience Segment The intended audience for the research output. This influences tone and depth: * Executive summaries * Technical explanations * Practitioner-level insights ### Company Name Used to ensure report framing aligns loosely with the brand context or vertical. ### Content Type Defaults to **General**, but can influence which explanations or structures are emphasized (e.g., guides vs. comparisons vs. thought leadership). ### Target Prompt If your article must support a specific user query used in AI systems, enter that here. For example: “What is predictive maintenance and how does it work?” This helps your Workflow prioritize research aligned to key user intents. ### Output Label Assign a descriptive variable name for downstream referencing. Examples: * `research_report` * `background_research` * `topic_report` ## How the node works behind the scenes The Article Research Report node executes a multi-stage research and synthesis pipeline. The internal workflow includes: ### 1. Input evaluation and research setup The workflow prepares your inputs (title, content type, audience, company context) and determines which research patterns to use. For example: * “How-to” topics may require step-by-step explanations * Comparative topics may need entity lists * Thought-leadership topics require key themes and debates ### 2. Multi-engine topic research The node runs several rounds of focused research across tools like: * Tavily * Perplexity * Specialized LLM-based research routines Multiple queries are generated from your article title to capture: * Definitions * Trends * Statistics * Case studies * Expert opinions * Historical context * Practical frameworks This produces a large pool of raw research artifacts. ### 3. Deduplication and relevance filtering The workflow discards: * Low-authority sources * Irrelevant tangents * Redundant content * Outdated material It retains only high-quality, authoritative findings. ### 4. Structured evidence formatting Research results are converted into a structured JSON dataset that contains: * Summaries * Key facts * Source URLs * Extracted insights This dataset becomes the input to the synthesis model. ### 5. Research synthesis into a narrative report An LLM configured as a **research synthesizer** composes an 800–1300 word report following strict requirements: * Clear paragraph writing * Inline numbered citations: \[1], \[2], \[3], … * A reference list at the end * A content-type–specific structure: * **How-to** → step-by-step * **Comparative** → list of entities to compare * **Thought leadership** → themes and debates * **Opinion** → insights backed by evidence The synthesizer is instructed to: * Be factual * Avoid hallucinations * Include only information supported by cited sources * Be neutral and research-driven * Produce *only* the research report (no article draft, no commentary) ### 6. Final formatting The output is standardized into a structured, ready-to-use text block containing: * Title * Corresponding narrative content * Inline citations * References section This makes the report suitable for editors, strategists, or downstream LLM article generation. ## Output The final output is an **800–1300 word research report** containing: * A narrative overview of the topic * Key findings from multiple sources * Definitions, models, or frameworks * Trends, challenges, and future outlooks * Inline citations like \[1], \[2], \[3]… * A reference list at the end This report is intended to be a foundation for: * Content briefs * Articles * Thought-leadership pieces * Educational summaries * Editorial decision-making ## Example usage ### 1. Create a deeply researched content workflow 1. Article Research Report ​ 2. [Research Snippets Generator](/agents/workflows/nodes/research/research-snippets-generator) 3. [Create Content Brief](/agents/workflows/nodes/content-creation/create-content-brief) 4. [Generate Article](/agents/workflows/nodes/content-creation/generate-article) This ensures every step is backed by trustworthy research. ### 2. Editorial preparation Use this node to educate internal teams about a topic before writing. ### 3. Automated research pipelines Trigger recurring research reports on topics like: * Industry trends * Product categories * Seasonal themes * Competitor verticals ## Best practices * Include a **Target Prompt** if you want the report aligned to real user queries. * Provide a clear, specific **Article Title** to guide more accurate research. * Pair this workflow with the [Research Snippets Generator node](/agents/workflows/nodes/research/research-snippets-generator) for fact extraction. * Use the output label consistently for downstream LLM steps. * Treat this report as **research**, not as a final draft article. # Web Page Scrape node Source: https://docs.tryprofound.com/agents/workflows/nodes/web-page-scrape Retrieve the content of a single webpage in a clean, structured format The **Web Page Scrape** node retrieves content from a single webpage and returns it in a clean, structured format. Use this step when you need to analyze, summarize, or extract information from any publicly accessible URL. This node supports both raw HTML and cleaned markdown outputs, making it useful for downstream AI processing in Prompt LLM steps or for building structured research Workflows. ![scrape.png](https://mintcdn.com/profound-37face47/LU_swtbqvG5kIsMS/images/agents/nodes/web-page-scrape-1.png?fit=max\&auto=format\&n=LU_swtbqvG5kIsMS\&q=85\&s=365c277e2c1a6cb0143dcb76091537ae) ## When to use this node Use Web Page Scrape for tasks such as: * Gathering content from articles, landing pages, blog posts, or documentation * Extracting text for summarization or competitive analysis * Pulling structured content for use in downstream LLM prompts * Normalizing webpage content before ingestion into other Workflow steps ## Node configuration Selecting the Web Page Scrape node opens its configuration panel on the right side of the Workflow Builder. This node includes the following fields. ### URL (required) Enter the webpage URL you want to scrape. You can either: * Paste a static URL, or * Insert a variable by typing `/` to reference Workflow inputs or outputs from previous steps ### Render Output As Choose the format for the scraped content. Available options: * **Markdown** – Returns cleaned, readable text suitable for LLM processing * **HTML** – Returns the page’s HTML structure Markdown is recommended for most AI-powered tasks, while HTML is useful when tags, structure, or metadata are important. ### Extract main content When enabled, Profound attempts to remove navigation elements, ads, footers, boilerplate, and other non-core content. This generally results in a cleaner output focused on the primary article or body text. Disable this option if you need the full page content without filtering. ### Output Label Provide a descriptive label for the output of this step. The label becomes the variable name you will reference in later Workflow nodes. Examples: * `page_content` * `scraped_markdown` * `raw_html` ## Output This node returns a single text output containing the scraped page content in the selected format. The output can be used in: * Prompt LLM steps * Additional research or parsing nodes * API calls * Any downstream transformation step ## Example usage ### 1. Scrape and summarize a webpage 1. Add a **Web Page Scrape** step and set the URL to the page you want to analyze. 2. Choose **Markdown** as the output format. 3. Add a [Prompt LLM](/agents/workflows/nodes/prompt-llm) step that references the scraped content: ```text wrap theme={null} Summarize the key ideas from the following content: {{web_page_scrape.output}} ``` ### 2. Extract structured data from HTML 1. Scrape the page using the **html** format. 2. Pass the HTML into a [Prompt LLM](/agents/workflows/nodes/prompt-llm) step with extraction instructions: ```text wrap theme={null} Extract all product names and prices from the following HTML. Return JSON. ``` ## Best practices * Use **Markdown output** for the cleanest AI-ready text. * Enable **Extract main content** when targeting article-style pages. * If scraping fails, confirm that the URL is publicly accessible and does not require authentication. * Keep output labels clear and descriptive to simplify downstream references. ## Troubleshooting ### The scraped content is empty or incomplete This can occur if the page relies heavily on client-side rendering or uses anti-scraping protection. Try switching to **html** output for more raw content. ### Boilerplate text appears in the output Ensure **Extract main content** is enabled to reduce clutter. ### The URL contains variables that are not resolving Type `/` to insert supported variables and avoid mismatched parameter names. # YouTube Title & Description node Source: https://docs.tryprofound.com/agents/workflows/nodes/youtube-title-description Extract the title and description from a public YouTube video The **YouTube Title & Description** node extracts the title and description from any publicly accessible YouTube video. Use this step when you need structured metadata for analysis, summarization, competitive research, or to feed into downstream LLM nodes. This node provides a clean, text-based output containing both fields, making it easy to integrate YouTube content into broader research or automation pipelines. ![title and des.png](https://mintcdn.com/profound-37face47/LU_swtbqvG5kIsMS/images/agents/nodes/youtube-title-description-1.png?fit=max\&auto=format\&n=LU_swtbqvG5kIsMS\&q=85\&s=3e6fe390402d49fccd91f6627c31ea51) ## When to use this node Use YouTube Title & Description for tasks such as: * Analyzing how competitors position and describe video content * Generating summaries, rewrites, or metadata optimizations using LLMs * Pulling YouTube context into AEO, SEO, or content strategy Workflows * Extracting structured information before running additional transformations ## Node configuration Selecting the YouTube Title & Description node opens its configuration panel on the right side of the Workflow Builder. ### YouTube video URL (required) Enter the URL of the YouTube video you want to extract data from. You can: * Paste a direct YouTube watch URL * Insert a variable from earlier Workflow steps by typing `/` Supported formats include typical watch URLs such as:\ `https://www.youtube.com/watch?v=VIDEO_ID` ### Output Label Provide a descriptive label for the output generated by this step. The label becomes the variable name that downstream steps reference. Examples: * `youtube_metadata` * `video_info` * `yt_title_description` ## Output This node returns a text output containing: * **Video title** * **Video description** The output can be passed into: * Prompt LLM steps (for summarization, rewriting, tone analysis, etc.) * Content comparison Workflows * Metadata optimization pipelines * Any downstream step requiring structured text ## Example usage ### 1. Analyze a competitor video description 1. Add a **YouTube Title & Description** step with a competitor video link. 2. Add a [Prompt LLM](/agents/workflows/nodes/prompt-llm) step to interpret the content: ```text wrap theme={null} Analyze the tone, target audience, and messaging strategy in the following video title and description: {{youtube_metadata_output}} ``` ### 2. Rewrite metadata for optimization 1. Add a Workflow input called `video_url`. 2. Use YouTube Title & Description with `video_url`. 3. Pass the output into a [Prompt LLM](/agents/workflows/nodes/prompt-llm) node: ```text wrap theme={null} Rewrite the following YouTube title and description to improve clarity and increase click-through rate: {{video_info.output}} ``` ## Best practices * Ensure the video URL is publicly available; private or restricted videos cannot be accessed. * Use descriptive output labels, especially when working with multiple videos. * Combine with the **YouTube Video Transcript** node for deeper semantic analysis of video content. ## Troubleshooting ### The node returns no data Verify that the YouTube URL is valid and not restricted or private. ### The output includes unexpected formatting Use a Prompt LLM step to clean or reformat the extracted text as needed. ### Variables do not resolve when used as the URL Insert variables by typing / and selecting from the available options in the picker. # YouTube Video Transcript node Source: https://docs.tryprofound.com/agents/workflows/nodes/youtube-video-transcript Extract the full transcript from a public YouTube video The **YouTube Video Transcript** node extracts the full transcript from any publicly accessible YouTube video. This includes auto-generated or manually uploaded transcripts. The node combines all transcript segments into a clean, readable text output that can be used for analysis, summarization, content extraction, or downstream LLM processing in your Workflows. ![transcript.png](https://mintcdn.com/profound-37face47/LU_swtbqvG5kIsMS/images/agents/nodes/youtube-video-transcript-1.png?fit=max\&auto=format\&n=LU_swtbqvG5kIsMS\&q=85\&s=0cc32f180034e9464bd22006a9f24a3c) ## When to use this node Use YouTube Video Transcript for tasks such as: * Analyzing spoken content from competitor or industry videos * Creating summaries, highlights, or structured notes using an LLM * Extracting keywords, entities, or insights from long-form video content * Feeding transcript text into research, comparison, or content generation Workflows ## Node configuration Selecting the YouTube Video Transcript node opens its configuration panel on the right side of the Workflow Builder. ### YouTube Video Link (required) Enter the URL of the YouTube video whose transcript you want to retrieve. You can: * Paste a direct YouTube watch URL * Insert a dynamic variable from a previous Workflow step by typing `/` Supported formats include typical YouTube links:\ `https://www.youtube.com/watch?v=VIDEO_ID` ### Output Label Assign a descriptive label to the transcript output. This becomes the variable name used in downstream nodes. Examples: * `video_transcript` * `yt_transcript` * `transcript_text` ## Output This node returns a single text output containing the full transcript of the video. Profound automatically: * Retrieves all transcript segments * Orders them correctly * Merges them into a continuous, readable text block The result is ideal for use in: * Prompt LLM analysis * Summaries and content transformation * Topic extraction or semantic clustering * QA extraction or answer engine testing Workflows ## Example usage ### 1. Summarize a long YouTube video 1. Add a **YouTube Video Transcript** step with the link to the video. 2. Pass the transcript to a [Prompt LLM](/agents/workflows/nodes/prompt-llm) step: ```text wrap theme={null} Summarize the following transcript into concise bullet points: {{video_transcript.output}} ``` ### 2. Extract insights for competitive analysis 1. Use YouTube Video Transcript to capture the full content of a competitor’s product demo. 2. Pass the output into a [Prompt LLM](/agents/workflows/nodes/prompt-llm) step to identify messaging themes, product claims, or feature positioning. ### 3. Generate social content from video text 1. Retrieve the transcript. 2. Use a [Prompt LLM](/agents/workflows/nodes/prompt-llm) step to generate snippets or social posts: ```text wrap theme={null} Create three LinkedIn post variations using insights from this transcript: {{yt_transcript.output}} ``` ## Best practices * Ensure the video is public or unlisted; transcripts cannot be retrieved from private or restricted videos. * Auto-generated transcripts may include inaccuracies; consider post-processing with an LLM to improve clarity. * Use clear output labels, especially when extracting multiple transcripts in a single Workflow. ## Troubleshooting ### No transcript is returned This may occur if the video has no transcript available or is private. Try another video link or verify settings on the source video. ### Transcript content looks fragmented Profound merges segments automatically, but heavily timestamped or irregular transcripts may benefit from cleanup via a Prompt LLM step. ### Variable insertion is not working Use `/` inside the URL field to insert available Workflow variables. # About Context Manager Source: https://docs.tryprofound.com/context-manager/about How Context Manager builds and maintains your brand's source of truth > [!NOTE] > > **Available on:** the Enterprise and Agency plans > > **Find it in:** the Context section of the Profound platform Context Manager gives Profound one place for everything it knows about you and your brand: your positioning, audience, strategy, and the way you like to work. The context it holds powers the rest of the platform. AI Marketer draws on it to respond like someone on your team, and [Agents](/agents/about) and [Projects](/projects/about) use it to produce work that fits your strategy. ## Why your context matters Without shared context, every AI conversation starts from zero. You re-explain the audience, the voice, and the product line, and the output still reads like it came from a generic model. The knowledge that would fix this already exists in documents, calls, and old chats, but nothing reuses it. Context Manager extracts durable information from those sources, stores it as knowledge records, and supplies it to AI Marketer, [Agents](/agents/about), and [Projects](/projects/about) when they generate output. You state a preference once and it carries over to later work, so you are not restating it in every conversation. ## Key features ### Overview of your context The **Overview** tab summarizes how your brand context and Personal Context work and what influences them. From the tab, ask AI Marketer to fix gaps or add missing context, ask it questions about your context, and browse and search your source files. ### Knowledge records that build themselves Your brand context lives in knowledge records that Profound generates and maintains for you, covering your company, audience, competitors, offerings, strategy, and execution. They are built from your data and your edits, and they shape how AI Marketer and [Agents](/agents/about) understand your workspace. Find your knowledge records in **Brand Context** **> Generated by Profound**. ### Identified gaps When Profound is missing a detail about your brand, it surfaces the gap as a card at the top of the **Brand Context** tab, tagged to the knowledge record it belongs to. Reviewing a gap starts a short chat where AI Marketer asks you one question at a time and applies your answers immediately. ### Source references Every knowledge record shows its references, section by section and claim by claim. Select **References** in your knowledge record to see where a piece of context came from. Each paragraph also ends with citation pills that name the sources behind it. Trace any claim about your brand to the document, call, or conversation behind it. ### Keeping the knowledge current Correct any section in the knowledge records, and that correction becomes the known answer: your own edits carry the highest authority of any source. When newer information arrives from a highly trusted source, such as a customer call or an approved Slack conversation, Profound favors the most recent information and updates the record automatically. ### Personal memory **Personal Context** keeps memories about how you work. Tell Profound anything it should remember, and it personalizes your future chats without mixing your preferences into the shared brand context. Search, add, edit, and remove memories at any time. ### Knowledge Bases and Brand Kits **Knowledge Base** is a repository of brand documents, webpages, and source materials that Profound uses as a source of truth about your brand. **Brand Kits** are brand identity profiles that define tone of voice, writing style, positioning, and other brand attributes for content generation. Learn more about both features in [Knowledge Bases and Brand Kits](/context-manager/knowledge-bases-and-brand-kits). > [!TIP] > > Brand Kits will become part of the Brand Context in Context Manager. If you are starting out with Profound, we recommend focusing on refining your brand voice in your knowledge records. # Context Manager FAQ Source: https://docs.tryprofound.com/context-manager/faq Frequently asked questions about Context Manager and Knowledge Bases ## Context and knowledge records > **Do I have to upload all the context manually?** > > No. Profound prepopulates knowledge records from the data you've already given it and from background collection about your brand, so files appear even before you upload anything. Adding documents to your Knowledge Base and connecting synced sources deepens the context further. > **Can we use Context Manager to enforce brand voice and editorial rules?** > > Yes. Knowledge records capture voice, approved claims, and do-and-don't rules, and AI Marketer and Agents draw on them when generating content. Correct a section once, and the change applies wherever your context is retrieved. > **How quickly do updates to context sources show up?** > > Knowledge Base uploads populate into knowledge records in about 5 minutes, and context from a Gong call appears about an hour after the call. Edits you approve through AI Marketer propagate almost immediately. > **What if a knowledge record says something wrong about my business?** > > Open the section and fix the claim manually, or tell AI Marketer what to change. The fix applies everywhere that context is used. > **How does context stay current, and how are gaps filled?** > > Context ingestion runs continuously: new Knowledge Base documents and synced source activity keep the files fresh. When something is missing, Profound prompts you to fill the gaps through Identified gap cards in the **Brand Context** tab. > **How do I remove synced data sources?** > > To opt out of ingesting context from a source, select the source in the **Synced Data** table and toggle off the **Context ingestion** setting. > > Only organization admins can change these settings. Learn more in [Roles and permissions](/platform-config/people/roles-and-permissions). > **Where are the Audience Segments?** > > Audience Segments is a legacy feature that is now a part of the Brand Context. To define or edit your audience, go to **Context Manager > Brand Context** and refine your **Audience** knowledge record. ## Knowledge Bases > **What’s the difference between a Knowledge Base and a knowledge record?** > > A Knowledge Base holds the source material you give Profound: the documents, webpages, and files themselves. A knowledge record is what Context Manager distills from that material, organized into your company, audience, competitors, offerings, strategy, and execution. > **What kinds of content should I add to my Knowledge Base?** > > Documents that describe how your brand works give the best results: brand guidelines, legal and compliance rules, product information, marketing strategies, content calendars, prior reports, sample outputs, and editorial standards. Anything that answers your priorities, your audience, your voice, and what to always do or avoid. > > See [What makes a good Knowledge Base for FactCheck](/answer-engine-insights/how-tos/factcheck-best-results#what-makes-a-good-knowledge-base-for-factcheck) for useful best practices for Knowledge Base content. What works for FactCheck also works well for Context Manager. > **What types of files can I upload to a Knowledge Base?** > > Supported file types are: PDF, text-based formats (Markdown, plain text), CSV, Word documents and Excel spreadsheets. All uploaded files are parsed to raw text before indexing, so non-text-based files may not display optimally. This doesn’t affect search. > **Does the Knowledge Base update automatically when I add new URLs?** > > An auto-sync feature is available for sitemap or URL crawls and external imports (like Notion and Google Drive). It's off (set to **Never sync**) by default. Enable it in the import dialog or in the folder settings on the Knowledge Base page. > **Is there a limit on how much content I can store in a Knowledge Base?** > > Files uploaded to Knowledge Bases can't exceed 100 MB. Larger files need to be split into smaller ones and uploaded separately. > > Increasing this limit is on our roadmap. That said, given how Profound processes information in Knowledge Bases (separating data into smaller chunks to enable effective search), it’s always best practice to keep files reasonably sized. # Get started with Context Manager Source: https://docs.tryprofound.com/context-manager/getting-started Add context sources, review knowledge records, and fill identified gaps ## Step 1: Open Context Manager In Profound, go to **Context Manager** in the **Context** section of the left sidebar. The **Brand Context** tab opens with your generated knowledge records, suggested actions, and any identified gaps. After you select **Skip** or **Get Started** in the Context Manager introduction, a **Set up your Context Manager** checklist appears in the bottom-right corner. It stays until you complete its steps: **Personalize**, **Brand**, and **Use context in AI Marketer**. Select **Personalize** or **Brand** to go to the page where you add that context. Select **Use context in AI Marketer** to start a chat that uses what you added. The **Brand** step appears only if your role can manage Brand Context. ## Step 2: Add Knowledge Base and Brand Kits In the **Knowledge Base** and **Brand Kits** tabs, upload the source-of-truth documents for your brand and your brand identity profiles. Learn more in [Create and manage Knowledge Bases](/context-manager/manage-knowledge-bases) and [Create and manage Brand Kits](/context-manager/manage-brand-kits). ## Step 3: Connect synced data sources Open the **Synced Data** tab and connect data sources such as Slack, Email, or Gong. Add sources with a **+ Add data** option and speak to your Profound team to set them up. Select a data source and toggle the **Context ingestion** setting to opt-in or opt-out of using each. You can change your choices anytime. > [!NOTE] > > Changing Context ingestion settings requires the Admin role. Learn more in [Roles and permissions](/platform-config/people/roles-and-permissions). ## Step 4: Review your knowledge records Scroll down to the **Generated by Profound** section. Open each knowledge record and check it for accuracy. Use the **References** option on any section to see where a claim came from, or use AI Marketer to change anything that reads wrong. ## Step 5: Close your identified gaps Select **Review** on a gap card in the **Identified gaps** section and answer the questions AI Marketer asks. Each answer flows into the right knowledge record right away. ## Step 6: Add personal memories On the **Personal Context** tab, add anything Profound should remember about how you work, such as "Keep my briefs under one page" or "I focus on the EMEA market." These memories personalize your future chats. ## Step 7: Connect your workspace tools Personal Context can also learn from the tools you work in. Go to **Context** > **Personal Context**, select **+ Add context**, then select **Connect to workspaces**. Connect an account and choose what to include: * **Asana, Jira, and monday.com**: bring in project and task context from the workspaces, sites, and boards you select. * **Google Drive, SharePoint, Notion, and Granola**: add the files, pages, and meeting notes you choose. Profound syncs the sources you select daily. With this context, Aim gets a better understanding of your role, priorities, and active work. # Knowledge Bases and Brand Kits Source: https://docs.tryprofound.com/context-manager/knowledge-bases-and-brand-kits What Knowledge Bases and Brand Kits are and how Profound uses them > [!NOTE] > > **Available on:** the Enterprise plan > > **Find it in:** the Context Manager in the Context section of Profound Knowledge Bases and Brand Kits are the sources of knowledge and context Profound has about your brand. Knowledge Bases are repositories of documents, webpages, and source materials that Profound uses as a source of truth about your brand. Brand Kits are brand identity profiles that define tone of voice, writing style, positioning, and other brand attributes for content generation. Both features are part of Profound's [Context Manager](/context-manager/about). ## What's the difference? Both features feed Profound's context about your brand, but they do it in different ways. Brand Kits define how Profound should communicate on behalf of your brand. Knowledge Bases provide Profound with information it should reference when generating content, performing [FactCheck analysis](/answer-engine-insights/factcheck/about), or any other action that needs to be grounded in facts. | **Component** | **What it defines** | | - | - | | Knowledge Bases | What to say | | Brand Kits | How to say it | ## How Knowledge Bases work Knowledge Bases are the foundation the rest of the platform reads from: * [Context Manager](/context-manager/about) distills them into knowledge records that ground AI Marketer, [Agents](/agents/about), [Projects](/projects/about), and anything else Profound does. * [FactCheck](/answer-engine-insights/factcheck/about) checks AI answers about your brand against them. * In [Workflows](/agents/workflows/about-workflows), a Knowledge Base node uses retrieval-augmented generation (RAG) to run a semantic search across your uploaded files and return the most relevant results, so the subsequent nodes' outputs rest on verified brand material rather than the model's assumptions. ### Information management Knowledge Bases use a folder structure modeled after a standard filesystem. Create folders and subfolders to organize content by product line, team, campaign, or any other grouping. Within each Knowledge Base, view all indexed files, add tags, create new files, delete outdated material, download previously uploaded content, and rename Knowledge Bases and folders directly from the UI. ### Content auto-sync An auto-sync feature is available for content created via URL or website crawls, as well as external imports. By default, it's disabled. Enable it per folder during import setup, or in the folder settings on the Knowledge Base page. Set the data update cadence (weekly, monthly, and so on) in the same place. ## How Brand Kits work > [!TIP] > > Brand Kits will become part of the **Brand Context** in **Context Manager**. If you are starting out with Profound, we recommend focusing on refining your brand voice in your knowledge records. Brand Kits analyze your brand's website to generate a brand identity profile covering brand information and writing style, which you can review and edit at any time. Anything that generates content on your behalf can apply a Brand Kit, so output matches your brand's voice and positioning. ### What a Brand Kit contains When you create a Brand Kit by entering a brand's website URL, Profound automatically generates a profile broken down into three categories: 1. **Brand information:** A high-level overview of the brand, including its mission and values, ideal customer profile, main competitors, and brand point of view. 2. **Brand writing style:** An overview of how the brand communicates, including author persona, tone of voice, and specific writing rules. 3. **Brand writing sample:** A writing sample extracted from the brand's website and analyzed to calibrate the writing style. All generated information can be reviewed and edited at any time from the Edit Brand Kit menu. ## Example use cases ### 1. Protect the brand's voice and style Upload style guides, messaging frameworks, and approved published content to a Knowledge Base, and create a Brand Kit from your website. AI Marketer and [Agents](/agents/about) draw on both, so briefs, blog posts, and ad copy match your voice and positioning without you restating it in every request. ### 2. Check what AI says about your brand Upload your source-of-truth documentation to a Knowledge Base and run [FactCheck](/answer-engine-insights/factcheck/about). It compares AI-generated answers about your brand against your documents, flags inaccurate claims, and shows which sources are behind them. ### 3. Ground generated content in facts Connect content Workflows to your Knowledge Base to automatically cross-reference outputs against source documents before publishing to your CMS. This prevents errors in key details such as specs, pricing, and messaging. # Create and manage Brand Kits Source: https://docs.tryprofound.com/context-manager/manage-brand-kits Create and edit Brand Kits in Context Manager ## Create a Brand Kit Access Brand Kits from the **Context Manager** section in the left navigation bar, Brand Kits tab. To create a Brand Kit, click **+ Create new Brand Kit**. This opens a prompt to input the URL of the brand's landing page. Profound analyzes the domain and **automatically** generates a brand identity broken down into two main categories: Brand Information and Writing Style. It also extracts a writing sample and generates a description of its style. ### Brand Information Brand Information provides a high-level overview of the brand and includes: * **About the brand:** Describes the brand's mission, values, and unique character. * **Ideal customer profile:** Summary of key characteristics of target customers. * **Competitors:** A list of the brand's main competitors. * **Brand point of view:** The brand's unique perspective and stance. ### Brand Writing Style Brand Writing Style provides an overview of how the brand communicates. It includes: * **Author persona:** The character the brand writes as. * **Tone of voice:** A summary of the brand tone. * **Writing rules:** Specific writing rules the brand follows. ### Brand Writing Sample A Brand Writing Sample is extracted from the brand's website and analyzed to help define the writing style. ## Edit a Brand Kit Select any Brand Kit from the Brand Kits list to make edits. All generated information can be updated by modifying the text fields in the **Edit Brand Kit** window. Click **Save** at the bottom of the window to store your changes. # Create and manage Knowledge Bases Source: https://docs.tryprofound.com/context-manager/manage-knowledge-bases Add documents, sync sources, and manage Knowledge Bases in Context Manager Add and manage Knowledge Bases from the [Context Manager](/context-manager/about) section of the platform. ## Create a Knowledge Base To add a new Knowledge Base: 1. In Profound platform, go to the **Context Manager** section in the left navigation bar. Select **Knowledge Base** tab at the top of the screen. 2. Select **+ Add Knowledge Base**. 3. Enter a name for the Knowledge Base. 4. Turn on **Sync with Brand Context** to let the documents in the Knowledge Base contribute to your Brand Context. Leave it off if you want to use this Knowledge Base only for file storage and retrieval. 5. Turn on **Limit to specific categories** to assign the contents to one or more specific [categories](/getting-started/categories), or leave it off to apply it's contents to all categories. 6. Select **Create** to confirm. Once created, upload content and organize your files. ## Add files to your Knowledge Base There are multiple ways to upload content to a Knowledge Base. Once uploaded, materials are indexed and made available to every part of Profound. ### Upload files To add a file to your Knowledge Base: 1. Select an existing Knowledge Base. 2. Select **+ Add Files**. 3. Select the type of upload. The available upload types include a URL scrape, a direct file upload, a website crawl, a file import from an external source, and pasting text into an editor. ### Scrape Specific URLs Paste individual URLs to extract and store content from live webpages. This method is useful for importing content from sources such as blog posts or public product pages. To scrape a single page: 1. Select **Scrape Page**. 2. Enter the full URL of the page you want to import. 3. Select the sync cadence: how often do you want Profound to refresh the information from this source. 4. Click **Import URL** to begin the process. > [!NOTE] > > This option only scrapes the specific page referenced by the URL. It does **not** scrape every page within the domain. Use the **Crawl Website** option to scrape a full site. ### Upload files directly Upload files directly into your Knowledge Base. This method works well for documentation such as guides, policies, or internal reference materials. To upload a file: 1. Select **Upload Files**. 2. Use **Browse Files** to select a file from your device, or drag and drop a file into the upload area. ### Crawl Website Index an entire site using a sitemap, or by crawling pages across a domain. Best used for documentation sites, help centers, or product catalogs. To crawl a website: 1. Select **Crawl Website**. 2. Choose one of the following options: * **Sitemap** – Points to a sitemap XML file, allowing the system to import all pages listed in the sitemap. * **Crawl** – Progressively indexes pages across a domain. When selecting this option, configure additional options: * **maximum number of pages** to crawl, the default is 100 * **maximum crawl depth**: the number of levels of the site structure to crawl (1 = crawl just the root page, 2 = root page and other pages linked from it, and so on). The default crawl depth is 3 Pages must be **publicly accessible** and not protected by login, authorization, or other credentials to be crawled. > [!TIP] > > Crawling pages rendered with JavaScript has some known limitations. Some sites (usually belonging to large enterprise companies) block crawlers. If this is your case, consider adding knowledge in other ways. ### Import from an external source (Notion, Google Drive, SharePoint, Confluence, Granola) Integrate your workspace, select files in the file picker, and import them to your Knowledge Base. Best used for internal documentation, similar use cases to direct file upload. To import files from an external source: 1. Select **Import from ...** for your import source. 2. If prompted, sign in to authorize the integration. 3. Select files in the file picker. 4. Select **Import**. To import from Confluence, sign in with your Atlassian account, then select the spaces and pages you want to import. > [!NOTE] > > Granola import requires a Granola's personal API key. Learn how to create it in [Granola's documentation](https://docs.granola.ai/help-center/sharing/integrations/granola-api#getting-started). ### Paste text Manually create a document by pasting or entering text directly in the text editor. Both structured and unstructured text are supported. Best used for creating new documents from scratch, or as a workaround when other methods don't work. To paste text as a document: 1. Select **Paste Text**. 2. Provide the following information: * **Document name** * **Document format** (Markdown or Plain Text) * **Content** 3. Select **Add Document** to save the file to the Knowledge Base. ## Manage files and content Knowledge Bases follow a folder structure modeled after a standard filesystem hierarchy. This lets you organize files the same way you would in a typical operating system, by creating folders and subfolders. Within each Knowledge Base, you can: * View indexed files * Add tags to files * Create new files * Delete outdated material * Download previously uploaded content This structure makes it easy to organize documentation by product line, brand, or other logical groupings. Well-organized content improves search relevance, enhances Agent performance, and supports more effective long-term knowledge management. ## Choose which categories a Knowledge Base applies to > [!TIP] > > Learn more about categories in [Categories in Profound](/getting-started/categories). By default, every Knowledge Base syncs with **Brand Context** and applies to all categories in your organization. If your organization has more than one category, you can assign each Knowledge Base to the categories it belongs to so context from one category doesn't appear in another category's Brand Context. Only users with access to a category can view and edit the Knowledge Bases and Brand Context for that category. ### Limit a Knowledge Base to select categories To map a Knowledge Base to specific categories: 1. In the Knowledge Base settings, turn on **Sync with Brand Context**. This gives Context Manager access to its contents. 2. Select **Limit to select categories**, then select the categories the Knowledge Base applies to. ![Knowledge Base Settings panel with the Limit to specific categories toggle highlighted above the category list](https://mintcdn.com/profound-37face47/V1WOgGibXMwY4fKe/images/context-manager/manage-knowledge-bases-1.png?fit=max\&auto=format\&n=V1WOgGibXMwY4fKe\&q=85\&s=f780a3a3578ed55e62988781eb07802d) Only Knowledge Bases mapped to a category feed that category's Brand Context. To change the category mappings of several Knowledge Bases at once, select them in the Knowledge Bases table, then select **Settings** at the bottom of the screen. Brand Context reorganizes automatically to reflect the new mappings. To view the Knowledge Bases assigned to a specific category, use the category filter above the Knowledge Bases table. ![Context Manager Knowledge Base tab with the All categories dropdown highlighted next to search and Add Knowledge Base](https://mintcdn.com/profound-37face47/V1WOgGibXMwY4fKe/images/context-manager/manage-knowledge-bases-2.png?fit=max\&auto=format\&n=V1WOgGibXMwY4fKe\&q=85\&s=ee17eed4fa1079fefb72444a71a720a1) # Use Knowledge Bases and Brand Kits with Workflows Source: https://docs.tryprofound.com/context-manager/using-with-workflows Add Knowledge Base and Brand Kit nodes to Workflows Knowledge Bases and Brand Kits are available as dedicated nodes that can be added to any [Workflow](/agents/workflows/about-workflows). ## Knowledge Base Workflow nodes The following Workflow nodes use Knowledge Bases: [Prompt LLM](/agents/workflows/nodes/prompt-llm), Search Knowledge Base, Get Knowledge Base File, and Upload to Knowledge Base. Each node addresses a different stage of a Workflow. ### Prompt LLM node (with Use Knowledge Base enabled) When Knowledge Base access is enabled within a [Prompt LLM](/agents/workflows/nodes/prompt-llm) node, the model references the Knowledge Base content to generate its output. **Best used when:** You want the LLM to ground the generated content in your brand's approved documentation. ### Search Knowledge Base node When you’re unsure which documents are most relevant, use this node to perform a search across your Knowledge Base. Results are ranked by relevance and passed into the following nodes for summarization, analysis, or content generation. **Best used when:** The Workflow needs to find the right source document before acting. For example, it might retrieve the most relevant product spec before generating a comparison article. ### Get Knowledge Base File node This node retrieves a specific file from your Knowledge Base, such as a brand style guide, product specification, or compliance document. The file is passed directly into subsequent workflow steps. **Best used when:** The Workflow always needs the same document at a fixed point in the workflow. ### Write to Knowledge Base node Enables Workflows to upload newly generated documents directly back into your Knowledge Base in one automated motion. In the node configuration, specify the Knowledge Base (upload location), content, and a document name. If a document with that name already exists in the Knowledge Base, its contents are overwritten. If it doesn’t, a new document is created. **Best used when:** You want to reuse a valuable Workflow node output (like competitive research reports or performance summaries) in future workflows. ## Brand Kit Workflow nodes Brand Kits connect to Workflows through one dedicated retrieval node and three content generation nodes that accept Brand Kit variables as inputs. ### Use Brand Kit node The Use Brand Kit node retrieves a single field from any of your saved Brand Kits and outputs it as a named variable. Available fields cover all Brand Kit sections: About the Brand, Ideal Customer Profile, Competitors, Brand Point of View, Author Persona, Tone of Voice, and Writing Rules. **Best used when:** You want to pass a specific piece of brand context, such as tone of voice or writing rules, into a content generation or LLM step. > [!TIP] > > The node retrieves one field at a time. If your workflow requires multiple fields, add a separate Use Brand Kit node for each, then reference all output variables in your downstream node. ### Prompt LLM node [Prompt LLM](/agents/workflows/nodes/prompt-llm) can reference output variables from upstream Use Brand Kit nodes, letting you inject any Brand Kit field directly into the model's instruction prompt. This is independent of the node's Knowledge Base access option: use both in the same step, or either on its own. **Best used when:** You need full control over how Brand Kit data is applied in a custom instruction. For example, pass Tone of Voice and Writing Rules as variables into a Prompt LLM node to rewrite content in the brand's established voice. ### Generate Article node The [Generate Article](/agents/workflows/nodes/content-creation/generate-article) node accepts Brand Kit output variables in its Additional Instructions field. It also includes a built-in brand alignment pass: a final refinement stage that checks the article for brand-safe language, correct terminology, and consistent voice. Supplying Brand Kit data from upstream nodes gives this pass the information it needs to apply your specific brand standards. **Best used when:** Building end-to-end automated content workflows where every generated article must reflect brand-approved tone, style, and positioning. ### Create Content Brief node Brand Kit variables from upstream Use Brand Kit nodes can be passed into the [Create Content Brief](/agents/workflows/nodes/content-creation/create-content-brief) node via the Additional Instructions field, carrying brand context through to any downstream [Generate Article](/agents/workflows/nodes/content-creation/generate-article) step. **Best used when:** You want to produce a content brief that already incorporates brand voice guidelines, ensuring writers and downstream generation steps are working from a brief that reflects both research and brand standards. ## Combining node outputs Like all Profound data nodes, Knowledge Base nodes produce a named output variable that can be passed into any subsequent node that accepts text or structured data inputs. For example, a Search Knowledge Base node can surface the most relevant product documentation, a Use Brand Kit node can retrieve the brand's tone of voice, a [Prompt LLM](/agents/workflows/nodes/prompt-llm) node can combine both to draft an accurate, on-brand comparison article, and a CMS node can publish the result directly. The Upload to Knowledge Base node saves finished outputs back into your Knowledge Base for reuse in future workflows. Don't be afraid to experiment with different node combinations. The workflows that work best for your team will depend on your content goals, publishing cadence, and the structure of your Knowledge Base. # Profound Documents Source: https://docs.tryprofound.com/documents/about Store, refine, and collaborate on generated content in the built-in Documents editor Documents give you a built-in editor to store, refine, and collaborate on generated content without leaving Profound. ![Document editor with the slash command menu listing headings and list blocks](https://mintcdn.com/profound-37face47/V1WOgGibXMwY4fKe/images/documents/about-1.png?fit=max\&auto=format\&n=V1WOgGibXMwY4fKe\&q=85\&s=a2b6f43dc23c115f28fac8c9b7010d7b) It works like other document collaboration services: rich text editing, real-time co-editing, and more. The difference is that it lives inside Profound, directly connected to your ​[Agents](/agents/about) and other areas of the platform. ## A persistent home for generated content Documents give every platform tool output a place to live inside Profound. Instead of exporting or copying, open the result directly in a Profound Document, edit it in place, and share it with your team. Your colleagues can join in real time, leave comments, and iterate on the content alongside you. [Workflows](/agents/workflows/about-workflows) can also read and write to Documents through Profound Docs [Workflow nodes](/agents/workflows/about-workflows#workflow-components), so you can build Workflows where Documents act as the handoff point between one Workflow and the next. ## Key features ### Rich text editor Write and format content using an inline toolbar or slash command menu. The editor supports the formatting you'd expect: headings, lists, bold text, links, and more. ### Real-time collaboration Multiple people can work on the same Document at once. Collaborator avatars appear on the page so you always know who's viewing or editing. ### Comments with resolution Leave inline comments on any part of a Document, reply to threads, and resolve them when the feedback is addressed. ### Integration with Agents and Aim [Agents](/agents/about) and [AI Marketer](/aim/about) can create, read, update, and delete Documents. ### Sharing inside and outside your organization Share a Document with colleagues in your organization, or with people outside it, such as clients, agencies, and partners. Everyone you invite to view the document needs a Profound account. People who don't have one yet are prompted to create a free account when you share with them. ## Getting started ### Step 1: Create a Document To create a Document manually, go to [docs.profound.new](http://docs.profound.new) to open a blank Document instantly, or select Documents from the left navigation sidebar in Profound. To save a [Workflow](/agents/workflows/about-workflows) output into a Profound Document, include **Profound Docs** [Workflow nodes](/agents/workflows/about-workflows#workflow-components) (Create Doc or Update Doc) in any content Workflow. Alternatively, go into any Workflow’s **Past runs** and open the output in Documents. To save an [Agent](/agents/about) output as a Document, declare a Document as one of the Agent’s [outputs](/agents/building-blocks-of-agent#outputs). ### Step 2: Iterate Once your generated content is ready, review your Document manually, then optionally feed the refined version into an Agent for further optimization. ### Step 3: Collaborate Share the Document with colleagues in your Profound organization. They'll see your real-time presence, can leave comments on any section, and can edit alongside you. ### Step 4: Share Share the Document with other organizations or partners outside of Profound. Select **Share** in the top right of the Document and enter the person's email address. Choose whether they can view, comment, or edit. Only the Document's owner can invite people from other organizations; editors can't share the Document further with external users. Documents shared across organizations are labeled as externally shared in your document list. > [!NOTE] > > A Document you receive from another organization belongs to that organization: you can't add it to your Knowledge Base, and AI Marketer can't reference it. To use its content in your own organization, duplicate the Document. # Adobe Experience Manager (S2S) Source: https://docs.tryprofound.com/integrations/adobe-experience-manager/overview Let Workflows find, read, create, and update Content Fragments in AEM as a Cloud Service Connect Adobe Experience Manager (AEM) to Profound and let Workflows find, read, create, and update Content Fragments directly in your AEM as a Cloud Service instance. The integration authenticates with an Adobe OAuth server-to-server (S2S) credential, so Workflow work with your content without an individual user login. ## Why the Adobe Experience Manager (S2S) integration exists Enterprise content teams manage thousands of structured Content Fragments in AEM. When Profound surfaces a content gap or an outdated claim in AI answers, acting on it means exporting the insight, finding the right fragment in AEM, and editing it by hand. This integration closes that loop: Workflows read your existing fragments, create new ones, and push updates back to AEM without leaving Profound. ## Using Adobe Experience Manager nodes in Profound Workflows Build Workflows that audit, refresh, and update AEM content based on Profound insights. > [!TIP] > > Follow Profound’s [AEM Integration Setup Guide](/integrations/adobe-experience-manager/setup/aem-setup-guide) to set up your Adobe Experience Manager (S2S) integration and make AEM nodes available to Workflows. Workflow nodes available for Adobe Experience Manager include: * **List Content Fragments** — lists the Content Fragments in a folder of your AEM instance * **Get Content Fragment** — reads the full content of a specific Content Fragment * **Create Content Fragment** — creates a new Content Fragment in your AEM instance * **Update Content Fragment** — updates the content of an existing Content Fragment Learn more about the nodes, configuration and troubleshooting in [Using Adobe Experience Manager in Workflows](/integrations/adobe-experience-manager/using-adobe-experience-manager-in-workflows). ## Example Workflow: product FAQ refresh This Workflow keeps your AEM-hosted product FAQs aligned with your current messaging. It writes revised copy back to AEM, then posts a Slack summary so your content team can review and publish the changes. 1. **AEM - List Content Fragments**: Point the node at the AEM folder that holds the Content Fragments for the FAQ you want to review. The node returns the fragments with their identifiers. 2. ​**Code node**: Turn the output of the previous step into the list the Iteration node can use. 3. [**Iteration node**](/agents/how-tos/add-iterations-to-workflows): Loop over the list of fragments, run the following steps for each, and return the list of updated AEM Content Fragments 1. **AEM - Get Content Fragment**: Read the fragment's full content. 2. [Prompt LLM node](/agents/workflows/nodes/prompt-llm) with the **Use Knowledge Base** option enabled: Compare the fragment's copy against your Knowledge Base. Return revised copy and a flag indicating whether the fragment needs changes. 3. [**Conditional node**](/agents/how-tos/add-conditionals-to-workflows): If the fragment needs no changes, move on to the next fragment. If it does, continue to the next step. 4. **AEM - Update Content Fragment**: Write the revised copy back to the fragment in AEM. 4. [Slack](/integrations/slack/connect-slack-to-profound): After the loop finishes, post the list of updated fragments returned by the Iteration node to your content team's Slack channel so they can review and publish the changes in AEM. Schedule this Workflow to run once or twice a week so your product FAQ content stays current. # AEM Integration Setup Guide Source: https://docs.tryprofound.com/integrations/adobe-experience-manager/setup/aem-setup-guide This guide walks you through connecting Adobe Experience Manager (AEM) as a Cloud Service to Profound using an Adobe OAuth Server-to-Server credential. Once connected, Profound Workflows can access, create, and update the Content Fragment models, folders, and content allowed by the credential's AEM permissions. ## Before you start You'll need: * An [AEM as a Cloud Service](https://experienceleague.adobe.com/en/docs/experience-manager-cloud-service/content/overview/introduction) program and **Author** environment * [AEM Cloud Manager](https://experience.adobe.com/#/cloud-manager) access to commit to an Adobe-managed repository and run a config pipeline (**Deployment Manager** role required) * Permissions to manage product profiles in the [Adobe Admin Console](https://adminconsole.adobe.com/) and to create OAuth credentials in the [Adobe Developer Console](https://developer.adobe.com/console) * A [Profound](https://www.tryprofound.com/) account ## Setup guide **1. Select the AEM environment** * Open [Adobe Cloud Manager](https://experience.adobe.com/#/cloud-manager). * Sign in under the organization that owns the AEM program you intend to use with Profound. * Select and open the program, then select **Environments** in the left sidebar. * Open the environment you intend to use and copy its base **Author URL**. It should look like: `https://author-p12345-e67890.adobeaemcloud.com`. ![Adobe Cloud Manager program overview page screenshot with Environments menu option and Author URL highlighted](https://mintcdn.com/profound-37face47/VadJiYMKj-yl6ums/images/integrations/aem/aem-author-url.png?fit=max\&auto=format\&n=VadJiYMKj-yl6ums\&q=85\&s=42c8c2c078ee518a383da531daad117f) **2. Prepare your AEM environment for API access** To enable API access in your environment, follow [Adobe's AEM APIs setup guide](https://experienceleague.adobe.com/en/docs/experience-manager-learn/cloud-service/aem-apis/openapis/setup). Once done, confirm that you have the correct product profile to use with the AEM API: * Go back to your AEM program environment page in [Adobe Cloud Manager](https://experience.adobe.com/#/cloud-manager) (where you left off in [Step 1](#step-1)). * Open the environment's action menu and select **Manage Access** > **Author Profiles**. [Adobe Admin Console](https://adminconsole.adobe.com/) opens your environment's page. ![Adobe Cloud Manager environment action menu screenshot with Manage Access and Author Profiles options highlighted](https://mintcdn.com/profound-37face47/VadJiYMKj-yl6ums/images/integrations/aem/aem-env-manage-access.png?fit=max\&auto=format\&n=VadJiYMKj-yl6ums\&q=85\&s=1f68022443bb0a3201c9ff3ccbf60fba) * Confirm that the **AEM Sites Content Managers - author...** profile exists for your program and environment. ![Adobe Admin Console Product profiles list screenshot with the AEM Sites Content Managers author profile highlighted](https://mintcdn.com/profound-37face47/VadJiYMKj-yl6ums/images/integrations/aem/aem-content-managers-profile.png?fit=max\&auto=format\&n=VadJiYMKj-yl6ums\&q=85\&s=3fc3ef6e366cca3ed72730a47c2b2a25) **3. Assign a Developer role to the credential creator** To authenticate with Profound, create an OAuth credential. You, or anyone with a **Developer** role in your **AEM Sites Content Managers** product profile, can create it. To assign a **Developer** role to the credential creator, continue where you left off in [Step 2](#step-2): * On your environment's page in [Adobe Admin Console](https://adminconsole.adobe.com/), select the **AEM Sites Content Managers - author...** product profile. * Open the **Developers** tab, then select **Add developers**. ![Adobe Admin Console product profile screenshot with the Developers tab and Add developers button highlighted](https://mintcdn.com/profound-37face47/VadJiYMKj-yl6ums/images/integrations/aem/aem-add-developer.png?fit=max\&auto=format\&n=VadJiYMKj-yl6ums\&q=85\&s=344874f02a4457f4695ffb351d71bb55) * Add the email or username of the person creating the OAuth credential, then select **Save**. > [!TIP] > > Learn more about assigning developers to Adobe product profiles in Adobe's [Manage developers in Adobe Admin Console](https://helpx.adobe.com/enterprise/using/manage-developers.html) guide. **4. Create the OAuth Server-to-Server credential** * Open the [Adobe Developer Console](https://developer.adobe.com/console). If you're following these steps in sequence, you should already be signed in under the organization that owns your Author AEM environment (same as in [Step 1](#step-1)). * Select **Create new project** in the **Quick start** section, or go to **Projects** in the top navigation menu and select **Create new project**. ![Adobe Developer Console home page quickstart section screenshot with Create new project option highlighted](https://mintcdn.com/profound-37face47/VadJiYMKj-yl6ums/images/integrations/aem/aem-dev-console-create-project.png?fit=max\&auto=format\&n=VadJiYMKj-yl6ums\&q=85\&s=4976d8aa25b741a477d2cb3b50ba158d) * On the project page, select **Edit project**, give your project a descriptive name (such as **Profound integration credentials**), then select **Save**. ![Adobe Developer Console Edit Project dialog screenshot with the Edit project button and the Project Title field highlighted](https://mintcdn.com/profound-37face47/VadJiYMKj-yl6ums/images/integrations/aem/aem-dev-console-edit-project.png?fit=max\&auto=format\&n=VadJiYMKj-yl6ums\&q=85\&s=57dd5b9c83524aee97d71c8018117610) * Select **Add to Project** > **API**. ![Adobe Developer Console project page screenshot with Add to Project and the API option highlighted](https://mintcdn.com/profound-37face47/VadJiYMKj-yl6ums/images/integrations/aem/aem-dev-console-project-add-api.png?fit=max\&auto=format\&n=VadJiYMKj-yl6ums\&q=85\&s=dd25b6dfd1305627eb727fc9ea5f55be) * On the **Add an API** page, filter the API list by **Experience Cloud**, select **AEM CS Sites Content Management**, then select **Next**. ![Add an API view screenshot with Experience Cloud filter option, AEM CS Sites Content Management option, and Next button highlighted](https://mintcdn.com/profound-37face47/VadJiYMKj-yl6ums/images/integrations/aem/aem-dev-console-cs-sites-content-management.png?fit=max\&auto=format\&n=VadJiYMKj-yl6ums\&q=85\&s=e5e114839ec4ecfb03f113b765d3d5af) * Select **Server-to-Server** > **OAuth Server-to-Server** as the authentication type. ![Configure API dialog screenshot with Server-to-Server Authentication and Next highlighted](https://mintcdn.com/profound-37face47/VadJiYMKj-yl6ums/images/integrations/aem/aem-dev-console-s2s-auth.png?fit=max\&auto=format\&n=VadJiYMKj-yl6ums\&q=85\&s=63392365f06c8098d1a9d85e1b46687f) ![Configure API dialog screenshot with OAuth Server-to-Server, the Credential name field, and Next button highlighted](https://mintcdn.com/profound-37face47/VadJiYMKj-yl6ums/images/integrations/aem/aem-configure-api-add-s2s-oauth.png?fit=max\&auto=format\&n=VadJiYMKj-yl6ums\&q=85\&s=468030a62ea0ee9e1b9cda0a86c4e351) * Select the Author product profile you prepared in [Step 2](#step-2), then save the configuration. ![Configure API dialog screenshot with the AEM Sites Content Managers product profile selected and Save configured API option highlighted](https://mintcdn.com/profound-37face47/VadJiYMKj-yl6ums/images/integrations/aem/aem-configure-api-select-profile.png?fit=max\&auto=format\&n=VadJiYMKj-yl6ums\&q=85\&s=63261c319a90c159ca5c1858d15e1c99) > [!NOTE] > > The AEM Sites Content Management API also provides the folder access Profound uses. No additional credentials are required. **5. Retrieve the connection values** After you save the API configuration, [Adobe Developer Console](https://developer.adobe.com/console) returns you to the project page. In the **Credentials** section, select your new OAuth Server-to-Server credential. From the credential page, copy the values you need to create the AEM integration in Profound: * **Client ID** * **Client Secret** * **Scopes** — copy the complete value exactly as Adobe displays it * **Organization ID** — optional; copy it only if the AEM tenant requires the `x-gw-ims-org-id` header ![OAuth Server-to-Server credential details view screenshot with Client ID, Client Secret, Scopes, and Organization ID highlighted](https://mintcdn.com/profound-37face47/VadJiYMKj-yl6ums/images/integrations/aem/aem-connection-values.png?fit=max\&auto=format\&n=VadJiYMKj-yl6ums\&q=85\&s=33a7ec41d13549bd3ae8ac6ed42993d9) **6. Register the client ID with the AEM environment** Before you can use the credential, register its client ID with your Author environment. * Back in [Adobe Cloud Manager](https://experience.adobe.com/#/cloud-manager), open the program and select **Repositories** in the left sidebar. * Identify the Adobe-managed repository and branch used by your environment's config pipeline. ![Adobe Cloud Manager Repositories screenshot with Repositories menu option, repository name, and the configured pipeline branch highlighted](https://mintcdn.com/profound-37face47/VadJiYMKj-yl6ums/images/integrations/aem/aem-repositories.png?fit=max\&auto=format\&n=VadJiYMKj-yl6ums\&q=85\&s=485eedb44a7d7f739f739f236640ff63) * Select **Access Repo Info** and copy the repository URL and access credentials. * Using your regular development workflow, clone the repository onto your machine and create or update the `config/api.yaml` file in the root directory with the following configuration: ```yaml theme={null} kind: "API" version: "1" metadata: envTypes: ["dev", "stage", "prod"] data: allowedClientIDs: author: - "" ``` Replace `` with the client ID you copied from Developer Console in [Step 5](#step-5). If you already have other API credentials configured, keep the existing configuration and add the client ID to the `author` list under `allowedClientIDs`. > [!TIP] > > Learn more about managing repositories and configuring pipelines in the following Adobe resources: > > * [AEM API client ID registration guide](https://experienceleague.adobe.com/en/docs/experience-manager-cloud-service/content/implementing/developing/open-api-based-apis#registering-a-client-id) > * [Manage repositories in Cloud Manager](https://experienceleague.adobe.com/en/docs/experience-manager-cloud-service/content/implementing/using-cloud-manager/managing-code/managing-repositories) > * [Use config pipelines](https://experienceleague.adobe.com/en/docs/experience-manager-cloud-service/content/operations/config-pipeline) guide > * [Invoke OpenAPI-based AEM APIs using OAuth Server-to-Server authentication](https://experienceleague.adobe.com/en/docs/experience-manager-learn/cloud-service/aem-apis/openapis/invoke-api-using-oauth-s2s) tutorial **7. Deploy API configuration with a config pipeline** * Still on your program page in [Adobe Cloud Manager](https://experience.adobe.com/#/cloud-manager), select **Pipelines** in the left sidebar. * Select **Add Pipeline**, then select **Add Non-Production Pipeline** for the development environment, or **Add Production Pipeline** for stage and production. ![Adobe Cloud Manager Pipelines screenshot with the Pipelines menu option and Add Pipeline button highlighted](https://mintcdn.com/profound-37face47/VadJiYMKj-yl6ums/images/integrations/aem/aem-add-pipeline.png?fit=max\&auto=format\&n=VadJiYMKj-yl6ums\&q=85\&s=d5a8bd283871ac52c0ed6a4d9e5a068a) * In the **Add Pipeline** dialog, select **Deployment Pipeline**, give your pipeline a descriptive name, then select **Continue**. * On the next screen, fill in the values as follows: * Select code to deploy: **Targeted deployment** * Include: **Config** * Eligible Deployment Environments: select your AEM environment from the dropdown * Repository, Git Branch, Code Location: the repository, branch, and config directory from [Step 6](#step-6) * Select **Save**. Your new config pipeline appears in the list of pipelines in the **Pipelines** section. Select the pipeline, then select **Run selected**. Wait for the deployment to complete successfully. ![Adobe Cloud Manager Pipelines screenshot with a new config pipeline selected and a Run selected button highlighted](https://mintcdn.com/profound-37face47/VadJiYMKj-yl6ums/images/integrations/aem/aem-pipeline-run.png?fit=max\&auto=format\&n=VadJiYMKj-yl6ums\&q=85\&s=f718730ffb2ea2526a06a6ce2b1cdfcd) > [!TIP] > > Learn more about deploying config pipelines in the following Adobe resources: > > * [Use config pipelines](https://experienceleague.adobe.com/en/docs/experience-manager-cloud-service/content/operations/config-pipeline) guide > * [Cloud Manager CI/CD pipelines](https://experienceleague.adobe.com/en/docs/experience-manager-cloud-service/content/implementing/using-cloud-manager/cicd-pipelines/introduction-ci-cd-pipelines) overview **8. Add an AEM S2S integration in Profound** * In [Profound](https://platform.tryprofound.com), select your organization name in the top-left corner of the platform, then select **Settings**. * In the left sidebar, select **Integrations** under **Account**. * Search for **Adobe Experience Manager (S2S)** and select it. ![Profound Integrations view screenshot with Adobe Experience Manager (S2S) integration card highlighted](https://mintcdn.com/profound-37face47/VadJiYMKj-yl6ums/images/integrations/aem/aem-s2s-integration-card.png?fit=max\&auto=format\&n=VadJiYMKj-yl6ums\&q=85\&s=bbc744a5c70df84ac351a72fe10642ed) * In the Adobe Experience Manager (S2S) integration view, select **+ Add account**. * In the **Connect Adobe Experience Manager (S2S)** dialog, enter the Author URL from [Step 1](#step-1) and the client secret, client ID, scopes, and organization ID you retrieved in [Step 5](#step-5). * Select **Connect account**. If the connection succeeds, your AEM environment appears in the list of connected accounts. ![Profound Adobe Experience Manager integration view screenshot with a connected account highlighted](https://mintcdn.com/profound-37face47/VadJiYMKj-yl6ums/images/integrations/aem/aem-profound-integration.png?fit=max\&auto=format\&n=VadJiYMKj-yl6ums\&q=85\&s=4170d3dfd15b7309d5a86171dd5bc7f0) Revoke Profound's access to your AEM environment at any time by selecting **Revoke** in the integration account action menu. ![Profound connected account action menu screenshot with the three-dot menu and the Revoke option highlighted](https://mintcdn.com/profound-37face47/VadJiYMKj-yl6ums/images/integrations/aem/aem-integration-revoke.png?fit=max\&auto=format\&n=VadJiYMKj-yl6ums\&q=85\&s=9ba55d38e6c349de6b38b98830e71bf1) **9. Verify the connection** To make sure Profound has all the permissions it needs to work with your AEM environment, verify that the AEM Workflow nodes run successfully. * In [Profound](https://platform.tryprofound.com), [create a new Workflow](https://help.tryprofound.com/articles/2212787792-create-an-agent), or open an existing Workflow draft. * Add the Adobe Experience Manager **List Content Fragments** and **Get Content Fragment** nodes, then select the connected AEM instance. * Select **Test node** (a play icon) in the node configuration panel and confirm that the AEM output contains the expected data. ![List Content Fragments node configuration panel screenshot with the play icon highlighted](https://mintcdn.com/profound-37face47/VadJiYMKj-yl6ums/images/integrations/aem/aem-test-run-agent.png?fit=max\&auto=format\&n=VadJiYMKj-yl6ums\&q=85\&s=f17bb8614765c9ad4aa26a037e4b21ac) * If you intend to create or update content fragments with Profound Workflows, test the **Create Content Fragment** and **Update Content Fragment** nodes the same way. > [!NOTE] > > Delete test content directly in the AEM environment. Current Profound Workflow nodes don't include a delete operation. ## Rotating AEM credentials ### Rotate a client secret only Adobe supports two client secrets on one OAuth Server-to-Server credential, which allows rotation without changing the client ID. Rotate your client secret as instructed in [Adobe developer documentation](https://developer.adobe.com/developer-console/docs/guides/authentication/ServerToServerAuthentication/implementation#rotating-client-secrets), then update the credentials in Profound (**Integrations** > **Adobe Experience Manager (S2S)** > **Edit credentials** in a connected account's action menu). The client ID doesn't change during this process, so you don't need to update or redeploy `api.yaml`. ### Rotate the entire OAuth credential To replace the entire AEM OAuth credential: 1. Generate a new credential as described in [Step 4](#step-4) of the setup guide. 2. Deploy the new client ID in `config/api.yaml` as instructed in [Step 6](#step-6) of the setup guide. 3. Update the credentials in Profound. > [!TIP] > > Keep the old client ID registered until you've verified the new connection. ## Best practices * Use an **Author** environment only. Profound doesn't connect to AEM Publish or Preview. Learn more about environments in [AEM as a Cloud Service tutorials](https://experienceleague.adobe.com/en/docs/experience-manager-learn/cloud-service/cloud-manager/environments). * Test the read and write Profound Workflow nodes separately to verify their folder and repository permissions. * Always store your client secret and other credentials in an approved secret manager, and never include them in screenshots, tickets, or source control. # Troubleshooting AEM Integration Setup Source: https://docs.tryprofound.com/integrations/adobe-experience-manager/setup/aem-setup-troubleshooting ## OAuth Server-to-Server authentication method is not available Confirm that the credential creator is assigned as a **Developer** on the intended product profile and that the profile includes the AEM Sites service, as described in [Step 2](/integrations/adobe-experience-manager/setup/aem-setup-guide#step-2) and [Step 3](/integrations/adobe-experience-manager/setup/aem-setup-guide#step-3) of the setup guide. ## AEM CS Sites Content Management product profile is missing Go back to [Step 2](/integrations/adobe-experience-manager/setup/aem-setup-guide#step-2) of the setup guide and verify the following: * Your Adobe organization owns the AEM environment you intend to use with Profound. * The environment is modernized for API access as instructed in Adobe's [Set up OpenAPI-based AEM APIs](https://experienceleague.adobe.com/en/docs/experience-manager-learn/cloud-service/aem-apis/openapis/setup) guide. ## Profound can't save the AEM credentials Confirm the following: * All connection values are correct and match the values of your OAuth credential from [Step 5](/integrations/adobe-experience-manager/setup/aem-setup-guide#step-5) of the setup guide. * Your OAuth credential uses the **AEM Sites Content Managers - author...** product profile. Check this in the [Adobe Developer Console](https://developer.adobe.com/console). If it doesn't, repeat [Step 2](/integrations/adobe-experience-manager/setup/aem-setup-guide#step-2) of the setup guide. * The config pipeline that deploys your API configuration (`api.yaml`) ran successfully. Check the **Pipelines** section of your AEM program page in [Adobe Cloud Manager](https://experience.adobe.com/#/cloud-manager). If it didn't, repeat [Step 6](/integrations/adobe-experience-manager/setup/aem-setup-guide#step-6) and [Step 7](/integrations/adobe-experience-manager/setup/aem-setup-guide#step-7) of the setup guide. * The client ID of the OAuth credential is in the correct place in the `api.yaml` configuration file, as instructed in [Step 6](/integrations/adobe-experience-manager/setup/aem-setup-guide#step-6) of the setup guide. * An Author IP allowlist isn't blocking Profound. Learn more in Adobe's [Manage IP Allow Lists](https://experienceleague.adobe.com/en/docs/experience-manager-cloud-service/content/implementing/using-cloud-manager/ip-allow-lists/managing-ip-allow-lists) guide. > [!TIP] > > If you have to apply an Author IP allowlist, contact Profound Support to obtain the current Profound outbound IP addresses rather than reusing values from an old guide or ticket. * If you're using a sandbox environment, it's online and not hibernated. Learn more in Adobe's [Hibernate and De-Hibernate Sandbox Environments](https://experienceleague.adobe.com/en/docs/experience-manager-cloud-service/content/implementing/using-cloud-manager/programs/hibernating-environments) guide. ## Content Fragment Models don't appear in Profound This usually means either the Content Fragment Model isn't allowed for the folders you use with Profound, or your OAuth credential's technical account lacks the permissions to manage Content Fragment Model configuration. Confirm the following: * The Content Fragment Model is enabled and allowed on your assets folder. Learn more in Adobe's [Content Fragment Models](https://experienceleague.adobe.com/en/docs/experience-manager-65/content/assets/content-fragments/content-fragments-models#enabling-disabling-a-content-fragment-model) documentation. * The technical account's service group has permissions to manage the Content Fragment Model configuration. With the setup described in the [setup guide](/integrations/adobe-experience-manager/setup/aem-setup-guide#setup-guide), your technical account should already have the necessary permissions to read and manage your AEM content. If it doesn't, manage permissions for specific folders and files in your AEM environment as described in Adobe's [Product Profile and Services user group permission management](https://experienceleague.adobe.com/en/docs/experience-manager-learn/cloud-service/aem-apis/openapis/how-to/services-user-group-permission-management) guide. > [!TIP] > > Grant the AEM OAuth credential's technical account the narrowest permissions that support the Workflow nodes you intend to use in Profound. Scope create and update access to approved folders only. ## Folders don't appear in Profound * Go back to [Step 5](/integrations/adobe-experience-manager/setup/aem-setup-guide#step-5) of the setup guide and confirm that the **Scopes** connection value for your Profound AEM integration matches the scopes value of your AEM OAuth credential. * Confirm that the scopes value includes `aem.fragments.management` and `aem.folders`. If it doesn't, don't add the missing scopes by hand. Confirm instead that you completed all prerequisites in [Step 2](/integrations/adobe-experience-manager/setup/aem-setup-guide#step-2) and [Step 3](/integrations/adobe-experience-manager/setup/aem-setup-guide#step-3) of the setup guide. * Confirm that the technical account's service group has the permissions it needs to manage content in the `/content/dam` folder in your AEM environment. To add permissions for specific folders and files, follow Adobe's [Product Profile and Services user group permission management](https://experienceleague.adobe.com/en/docs/experience-manager-learn/cloud-service/aem-apis/openapis/how-to/services-user-group-permission-management) guide. ## Create or Update Content Fragment node returns a permissions error This usually means your AEM OAuth credential is authenticated but doesn't have the required repository access. Follow Adobe's [Product Profile and Services user group permission management](https://experienceleague.adobe.com/en/docs/experience-manager-learn/cloud-service/aem-apis/openapis/how-to/services-user-group-permission-management) guide to grant the service group that contains your AEM technical account the create or update permissions it needs for the folder you use with Profound. # Using Adobe Experience Manager in Workflows Source: https://docs.tryprofound.com/integrations/adobe-experience-manager/using-adobe-experience-manager-in-workflows After you connect your Adobe Experience Manager (AEM) account, the following nodes become available in Profound Workflows. Use them to find, read, create, and update AEM Content Fragments. All operations run against the connected AEM Author environment and use the permissions assigned to the OAuth credential's technical account. ## Available nodes **List Content Fragments** ### List Content Fragments Retrieve Content Fragments from the connected Author environment. #### Required inputs * **AEM Instance** — the connected Author environment #### Optional inputs * **Folder** — limits the list to an approved folder below `/content/dam` * **References** — controls whether linked fragments are returned and hydrated * **Limit** — number of results to return; the default is `25` and the maximum is `50` * **Cursor** — a pagination cursor from a previous List or Search node's output, used to fetch the next page of results * **Projection** — use `summary` when you need summary data only #### Output The output contains the matching Content Fragments and, when more results are available, a pagination cursor for the next page. **Search Content Fragments** ### Search Content Fragments Find Content Fragments matching one or more criteria. #### Required inputs * **AEM Instance** — the connected Author environment > [!NOTE] > > Profound starts the search with a **Folder** filter of `/content/dam`. Change that folder or add another filter as needed. #### Search filters * **Search text** — searches the AEM-supported fragment content for the selected text * **Folder** — scopes the search to a DAM folder path * **Models** — limits results to selected Content Fragment Models * **Statuses** — New, Draft, Published, Modified, or Unpublished * **Locale** — limits results to a locale * **Direct children only** — excludes fragments in nested folders * **Created after** and **Created before** — constrain the creation date #### Optional inputs * **Raw Query** — an AEM-supported search-query JSON; use it for filters or sorting the node configuration form doesn't include * **Limit** — number of results to return; the default is `25` and the maximum is `50` * **Cursor** — a pagination cursor from a previous List or Search node's output, used to fetch the next page of results * **Projection** — use `summary` when you need summary data only #### Output The output contains the matching Content Fragments and, when more results are available, a pagination cursor for the next page. **Get Content Fragment** ### Get Content Fragment Retrieve the complete data for one Content Fragment. #### Required inputs * **AEM Instance** — the connected Author environment * **Content Fragment** — select a fragment from the dropdown, or use a variable from a previous node's output #### Optional inputs * **Content Fragment ID** — the fragment UUID as text, which overrides the fragment selected in **Required inputs** * **References** — controls whether linked fragments are returned and hydrated #### Output The output includes the Content Fragment data and its ETag when available. Model-specific fields follow the response AEM returns. **Create Content Fragment** ### Create Content Fragment Add Author content based on an enabled Content Fragment Model. #### Required inputs * **AEM Instance** — the connected Author environment * **Parent Folder** — the destination folder below `/content/dam` * **Content Fragment Model** — the model that defines the fragment fields * **Title** — the fragment title * **Data format** * **Structured** — loads the selected model and displays its fields in the configuration panel * **Raw JSON** — accepts an object whose keys match the AEM model's field names * **Fields** / **Raw JSON** — the structure for your input data, based on the selected **Data format** > [!TIP] > > Use Raw JSON when the Content Fragment Model is supplied with a variable, because the node editor can't load that model's field definition in advance. #### Optional inputs * **Name** — URL-safe Content Fragment name; derived from the **Title** when left blank * **Description** — fragment description #### Output The output includes the created Content Fragment, its ETag, and its Location when AEM provides those values. > [!NOTE] > > Creating or updating a fragment doesn't publish it. Review and publish the content in AEM. **Update Content Fragment** ### Update Content Fragment Change an existing fragment. The node modifies only the fields you provide. #### Required inputs * **AEM Instance** — the connected Author environment * **Content Fragment** — select a fragment from the dropdown, or use a variable from a previous node's output * **Data format** * **Structured** — loads the selected model and displays its fields in the configuration panel * **Raw JSON** — accepts an object whose keys match the AEM model's field names * At least one change to **Title**, **Description**, or **Fields** / **Raw JSON** > [!TIP] > > Use Raw JSON when the Content Fragment Model is supplied with a variable, because the node editor can't load that model's field definition in advance. #### Optional inputs * **Title** — leave empty to keep the current title * **Description** — leave empty to keep the current description * **Fields** / **Raw JSON** — the structure for your input data, based on the selected **Data format** * **References** — controls whether linked fragments are returned and hydrated * **ETag** — optimistic-lock value from an earlier Get or Update output. When left blank, Profound reads the current ETag immediately before sending the update. If the provided ETag is stale, the node reports a conflict. #### Output The output includes the updated Content Fragment and its new ETag when AEM provides one. > [!NOTE] > > Creating or updating a fragment doesn't publish it. Review and publish the content in AEM. *** ## Key concepts ### AEM Instance The connected AEM Author environment. Select it before choosing a model, folder, or fragment. ### Content Fragment Model The AEM schema that defines a fragment's fields, types, required values, and allowed content. The model must be enabled and allowed by the destination folder's policy. ### DAM paths Content Fragment folders use repository paths below `/content/dam`. Folder permissions and policies control which content Profound can read or change. ### Content Fragment ID AEM API operations identify a Content Fragment by UUID. Profound's picker displays searchable fragment information and supplies the UUID to the node. ### ETag An ETag is a unique identifier for a specific version of a Content Fragment's data. Pass it from a **Get Content Fragment** node to the **Update Content Fragment** node to prevent the workflow from silently overwriting a change made after the fragment was read. ### Pagination List and Search nodes return up to `50` fragments per request. When the output contains a cursor, provide it to the next List or Search node to retrieve the next page of results. ### Hydrated Content Fragment A Content Fragment that contains its full field values, rather than only basic IDs and URLs. ### References References control how linked fragments are included. Hydrated and all-reference modes can return larger responses, so use them only when the workflow needs linked content. *** ## Troubleshooting ### A folder, fragment, or model picker is disabled or empty Select an **AEM Instance** first. If the picker stays empty, verify that your OAuth credential's technical account can read the corresponding model, folder, or fragment. Learn more in the [setup troubleshooting](/integrations/adobe-experience-manager/setup/aem-setup-troubleshooting) guide. ### Search returns an invalid-query error Restore the **Folder** filter to `/content/dam` or add another filter. When using **Raw Query**, include a non-empty JSON object and use Adobe-supported filter and sort fields. ### Create node reports an unknown field or invalid value Select the model and use **Structured** format when possible. If you have to use **Raw JSON** format, make sure each key matches the AEM model field name and provide a value with the model's expected type and cardinality. ### Update node reports that there are no changes Enter at least one **Title**, **Description**, or model field value. Empty inputs preserve the current content. ### Update node reports a conflict The fragment changed after AEM issued the ETag. Run the **Get Content Fragment** node again, review the latest content, then apply the update with the new ETag. ### A node returns a permissions error Confirm that the technical account's service group has permission for that exact operation and DAM path. Read access can succeed while Create or Update remains blocked. To add permissions for specific folders and files in your AEM environment, follow Adobe's [Product Profile and Services user group permission management](https://experienceleague.adobe.com/en/docs/experience-manager-learn/cloud-service/aem-apis/openapis/how-to/services-user-group-permission-management) guide. ### Only the first page of results is returned Use the cursor returned by the List or Search node as the next request's **Cursor**. Each page can contain no more than `50` results. *** ## Additional resources * [AEM Sites Content Management API reference](https://developer.adobe.com/experience-cloud/experience-manager-apis/api/stable/sites/) * [AEM Folders API reference](https://developer.adobe.com/experience-cloud/experience-manager-apis/api/stable/folders/) # Connect Contentful to Profound Source: https://docs.tryprofound.com/integrations/contentful/connect-contentful-to-profound ## Prerequisites Before connecting Contentful to Profound, ensure: * You have access to your Contentful organization * You have **Admin** or **Owner** permissions for the space you want to connect * Your Contentful account is active ## Connect Your Account 1. In Profound, select your organization name in the top-left corner of the platform, then select **Settings**. 2. In the left sidebar, select **Integrations** under **Account**. 3. Search for **Contentful**, select it, then select **+ Add account**. 4. You'll be redirected to Contentful to authorize Profound. 5. Sign in to your Contentful account and grant the requested permissions. 6. Select the organization and space you want to connect. 7. Once authorized, you'll be redirected back to Profound. Once connected, Contentful will appear as an available integration and can be selected inside Profound Workflows. > [!NOTE] > > Profound requests **content\_management\_manage** scope, which allows creating, updating, and publishing content in your connected spaces. # Using Contentful in Workflows Source: https://docs.tryprofound.com/integrations/contentful/using-contentful-in-workflows After connecting your Contentful account, the following actions become available as Workflow steps. Each step requires you to select a connected **Contentful Account** from a dropdown. **Create entry** #### **Create Entry** Create a new entry in your Contentful space. **Required inputs** * **Contentful Account** * **Space** * **Environment** * **Content Type** * **Fields** (dynamic based on content type schema) **Optional inputs** * **Locale** (defaults to space's default locale) * **Publish** (publish immediately or save as draft) The entry is created based on your content type's schema. Rich text fields accept Markdown which is automatically converted to Contentful's rich text format. **Tip:** Leave **Publish** unchecked to create drafts for review before publishing. **Update entry** #### **Update Entry** Update an existing entry in your Contentful space. **Required inputs** * **Contentful Account** * **Space** * **Environment** * **Entry ID** **Optional inputs** * **Fields** (only fields you want to update) * **Locale** (defaults to space's default locale) * **Publish** (publish changes immediately) **Important:** Only the fields you provide will be modified; all other fields remain unchanged. **Get entry** #### **Get Entry** Retrieve a single entry by ID. **Required inputs** * **Contentful Account** * **Space** * **Environment** * **Entry ID** The output includes the entry's full content with all fields and metadata. **List entries** #### **List Entries** Retrieve a list of entries from your Contentful space. **Required inputs** * **Contentful Account** * **Space** * **Environment** **Optional inputs** * **Content Type** (filter by content type) * **Limit** (number of entries to return) * **Skip** (pagination offset) The output is a structured list of entries that can be used in downstream Workflow steps. *** ## Supported Field Types Contentful's dynamic schema means Profound automatically adapts to your content model. All field types are supported: | Field Type | Description | Input Format | | - | - | - | | **Short text** | Single-line text | Plain text | | **Long text** | Multi-line text | Plain text | | **Rich text** | Formatted content | Markdown (auto-converted) | | **Number** | Decimal numbers | Number | | **Integer** | Whole numbers | Integer | | **Boolean** | True/false | Boolean | | **Date & time** | ISO 8601 dates | Date string | | **Location** | Geographic coordinates | `{lat, lon}` object | | **JSON object** | Arbitrary JSON | JSON object | | **Media** | Asset references | Asset ID | | **Reference** | Entry references | Entry ID or array of IDs | *** ## Working with Rich Text Rich text fields in Contentful use a structured document format (AST). Profound accepts **Markdown**, **HTML**, or **Contentful's native rich text JSON** format. **Supported Markdown:** * Headings (`# H1` through `###### H6`) * Paragraphs * **Bold**, *italic*, and other formatting * Bullet and numbered lists * Blockquotes * Code blocks * Links **Supported HTML:** * `

` through `

` headings * `

` paragraphs * ``, ``, `` formatting * `