Attribution
Attribution connects your AI visibility data to real leads and revenue. Instead of only seeing whether your brand appears in AI answers, you can see whether customers actually say they found you through ChatGPT, Perplexity, Claude, Google, ads, referrals, or other channels. Use Attribution when you ask questions like:- “How did you hear about us?”
- “Where did you first find us?”
- “Which source influenced this order?”
- “How much pipeline came from AI search?”
Recommended setup
The simplest setup is to send one webhook whenever a lead, signup, order, or deal is created.Choose how to send data
Webhook
Best for forms, CRMs, shops, and automation tools.
Customer API
Best for backend integrations and direct API clients.
Bulk import
Best for historical imports or daily batch jobs.
Dashboard workflows
Best when your source sends custom fields.
Outbound webhook
Best when your own system should receive saved responses.
Send data with a webhook
Your project webhook endpoint has this shape:POST requests with Content-Type: application/json. Form-encoded and multipart form submissions are also accepted for form tools that cannot send raw JSON.
Field reference
| Field | Required | Description |
|---|---|---|
channelId | Yes | The source selected by the customer, for example AI Search, ChatGPT, Google, Referral, or Paid Ads. |
channelLabel | No | Human-readable label if you want it to differ from channelId. |
channelCategory | No | Optional category such as ai_search, organic_search, paid, social, referral, content, direct, or other. |
respondentEmail | No | Customer or lead email. Also accepted as email in raw webhooks. |
respondentName | No | Customer or lead name. Also accepted as name in raw webhooks. |
respondentExternalId | No | ID from your CRM, order system, checkout, or data warehouse. |
dealValue | No | Numeric revenue or pipeline value. |
dealCurrency | No | Currency code such as EUR, USD, or GBP. Send the currency as paid. |
freetextResponse | No | Original text answer if the customer used a free-text field. |
formId | No | Form, survey, or source identifier. |
pageUrl | No | Page where the form or checkout happened. |
metadata | No | Extra key-value data such as product, SKU, country, plan, or quantity. |
chatgpt, openai, claude, perplexity, gemini, copilot, or ai search are categorized as ai_search.
Map incoming fields
Many tools send payloads with their own names, such asLeadSource, how_did_you_find_us, q3_howDid, or nested Typeform answers. Finseo can map these fields in Attribution workflows.
- Open Attribution.
- Go to Workflows.
- Send one test webhook from your source system.
- Open the created workflow.
- Map the incoming fields to attribution, email, name, deal value, currency, form ID, or rules.
- Save the mapping.
utm_source contains chatgpt, map it to AI Search.
Supported source formats
Finseo auto-detects several common sources:- HubSpot: legacy contact webhook payloads with
properties, or custom JSON bodies from Operations Hub. - Typeform:
form_response.answers, including choice, choices, text, and email fields. - Tally:
data.fieldspayloads. - Salesforce: JSON from Flow HTTP Callout, for example
LeadSource,Email,Name,Amount, andCurrencyIsoCode. - Jotform: multipart/form-data with
rawRequestor fields likeq3_howDid,formID, andsubmissionID. - Raw JSON: direct payloads with fields like
channelId,respondentEmail,dealValue, andmetadata.
Examples
Daily batch import
If you prefer a daily job, send up to1000 responses at once with the bulk API.
Receive attribution events
You can configure an outbound webhook URL in Attribution settings. Finseo sends an event to your URL whenever a new response is saved.X-FinSEO-Signature header using HMAC-SHA256.
Best practices
- Add the attribution question close to conversion, such as signup, demo request, checkout, or lead qualification.
- Keep answer options stable across countries. Translate labels for users if needed, but keep webhook values consistent.
- Send the original paid currency in
dealCurrency; Finseo can still aggregate and map values. - Include a stable
respondentExternalIdsuch as order ID, CRM lead ID, contact ID, or deal ID. - Put product, SKU, market, campaign, and other business context in
metadata. - Send one event per lead, order, or deal. Avoid sending every page view as attribution.