B2B Contact Intent Enrichment — Email & LinkedIn Intent
Pricing
from $7.00 / 1,000 matched contact records
B2B Contact Intent Enrichment — Email & LinkedIn Intent
Add available research topics and intent scores to known contacts or companies. Preview checks match counts; paid results can be joined back to your existing list.
Pricing
from $7.00 / 1,000 matched contact records
Rating
0.0
(0)
Developer
CAG Signals
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
10 days ago
Last modified
Categories
Share
Add available research topics and intent scores to a list you already have. Supply known contacts by email or LinkedIn URL, or select company mode for company domains. Join the results back to your list and decide which records deserve further research.
First step: preview checks billable-match counts for up to 25 inputs. It does not return paid topic rows. Inspecting topics is a separate, optional paid run at the price shown in your Apify account. Person mode can involve business personal data; company mode is a different scope.
Evaluating five known companies? Start with Company Buyer Intent Lookup for the simpler company-only exercise.
Questions about fit? Email CAG Signals or reply to your invitation. Keep customer lists and credentials in your own workspace.
What buyer-intent data means
Buyer-intent data estimates the topics a person or company is actively researching. A topic, intent tier, and percentile help rank timing and fit; they are signals, not proof of intent or purchase. Use them alongside your own CRM context and lawful outreach rules.
Sample output
The values below are illustrative; the field names match the public dataset contract.
{"record_type": "DATA","source_actor": "b2b-buyer-intent-enrichment","data_source": "licensed-b2b-intent","contract_version": "2.0","input_id": "lead-1","entity_type": "person","matched": true,"matched_on": "email","top_topic_name": "Marketing Automation","intent_score": "high","intent_percentile": 92,"topic_count": 2,"preview": false,"retrieved_at": "2026-08-29T12:00:00.000Z"}
Dataset table preview:

| input_id | entity_type | matched | top_topic_name | intent_score | intent_percentile | topic_count |
|---|---|---|---|---|---|---|
| lead-1 | person | true | Marketing Automation | high | 92 | 2 |
Tutorial: add intent signals to an existing list
Run it in Apify Console
- Open the Actor and select Start.
- Keep the prefilled example and
previewModeenabled. - Start the run and inspect the Output dataset. Preview dry-runs up to 25 inputs and returns the exact billable-match count without returning paid intent rows.
- Confirm that every input has your own opaque
id; paid output returns it asinput_idso you can join results back to the source list. - Disable
previewModeonly after the count, entity type, correlation keys, retention controls, and downstream mapping look correct.
Preview runs do not emit matched-intent-record events. Apify platform usage may still apply according to your Apify plan.
Run it through the API
curl -X POST \"https://api.apify.com/v2/acts/cag_ai-actors~b2b-buyer-intent-enrichment/run-sync-get-dataset-items" \-H "Authorization: Bearer $APIFY_TOKEN" \-H "Content-Type: application/json" \-d '{"entityType": "person","items": [{ "id": "lead-1", "email": "buyer@example.com" }],"previewMode": true}'
Input
{"entityType": "person","items": [{ "id": "lead-1", "email": "buyer@example.com" },{ "id": "lead-2", "linkedin_url": "https://www.linkedin.com/in/example" }],"minScore": "medium","previewMode": true,"includeUnmatched": true}
entityTypeispersonforemail/linkedin_url, orcompanyfordomain/linkedin_company_url.itemsaccepts up to 10,000 records in live mode. Preserve your own join key inid.previewModedry-runs at most 25 inputs and returns an exact count rather than paid intent rows.includeUnmatchedkeeps uncharged unmatched rows in paid output so the dataset remains easy to join.demoModereturns deterministic, clearly labeled example data and does not emit paid result events.
Output fields
record_typedistinguishesDATA,ERROR,SUPPRESSED, and the finalSUMMARYrow.input_idpreserves your correlation key;entity_type,matched, andmatched_ondescribe resolution.top_topic_name,intent_score, andintent_percentiledescribe the strongest returned topic.topic_countandtopicsretain the full topic set.preview,data_date,data_source,contract_version, andretrieved_atdescribe the run and source.SUPPRESSEDrows are unmatched and contain only the caller's opaqueinput_id, status fields, and no person identifier.- The
SUMMARYrow reports input, matched, delivered, charged, unmatched, and suppressed counts plus total charge.
Pricing
Base pay-per-result price: $0.01 per matched contact record ($10 per 1,000). Actor Start is $0.00. Apify plan discounts may lower the unit price; use this Actor's Pricing tab for current plan-specific rates and platform-cost details.
No-match, no-charge guarantee: unmatched records, suppressed records, validation failures, preview rows, cost-preview rows, demo rows, and error rows do not emit the matched-intent-record event. Apify platform usage may still apply.
Integrations
n8n HTTP Request
Create an HTTP Request node with method POST, the synchronous dataset endpoint above, an Authorization: Bearer ... header, and a JSON body built from contact or company fields. Split the returned JSON array and join rows back on input_id.
Make
Use HTTP > Make a request with the same endpoint, headers, and JSON body. Parse the response as JSON, then map input_id, matched, top_topic_name, and intent_percentile into the next module.
Clay HTTP API
Add an HTTP API enrichment column, choose POST, and map Clay's row ID plus email or LinkedIn URL into items[0]. Start with previewMode: true, then map the returned fields back into the row using input_id.
curl / API
The curl example above returns dataset items synchronously. For larger batches, start the Actor asynchronously and fetch the default dataset only after the run succeeds.
Apify MCP
After connecting the Apify MCP server to an MCP-compatible agent, ask it to run cag_ai-actors/b2b-buyer-intent-enrichment with the same JSON input. Keep previewMode enabled for the first agent-initiated run and require confirmation before a paid run.
FAQ
Which person identifiers are supported?
Use an email address or LinkedIn /in/ URL when entityType is person.
Can I enrich companies too?
Yes. Set entityType to company and provide a domain or LinkedIn /company/ URL.
How do I preserve my CRM join key?
Set an id on every input item. The public output returns it as input_id without using it for matching.
What does preview return?
It dry-runs up to 25 inputs and returns the exact billable match count without paid topic rows or paid result events.
When am I charged?
Only after a matched record is written in paid mode using the managed service. Unmatched, suppressed, preview, cost-preview, demo, and error paths do not emit matched-record events.
Can I keep unmatched rows for joins?
Yes. includeUnmatched defaults to true in live mode, and those rows remain uncharged.
Does the Actor log my identifiers or credentials?
It does not log input identifiers or echo API credentials in the public dataset. You should still avoid placing secrets in saved task text or source control.
How do I cap spend?
Set ACTOR_MAX_TOTAL_CHARGE_USD on the run. The Actor stops further paid delivery when the event-charge limit is reached.
How should I retain the output?
Choose an Apify storage-retention period appropriate to your purpose, restrict dataset access, and delete or suppress records when required.
Data provenance and responsible use
CAG Signals provides B2B buyer-intent workflows for account research and prioritization.
CAG Signals delivers licensed B2B buyer-intent data through a managed data service. CAG Signals is independently operated and is not affiliated with or endorsed by any upstream data provider.
Results use licensed B2B buyer-intent data and may contain person-level business data. Use the Actor only for lawful B2B sales, marketing, and research involving records you are permitted to process. Do not use output for eligibility, credit, employment, housing, insurance, consumer profiling, discriminatory targeting, or raw-data resale. Apply an appropriate legal basis, access controls, retention limits, security safeguards, and suppression/deletion process.
For a suppression or removal request, use the Issues tab on this Actor page without posting an email address, profile URL, hashed identifier, dataset row, API token, or other personal data. Ask for a private intake method and provide the minimum identifier only through that private channel. CAG Signals will acknowledge the request within 24 hours, investigate the relevant records, and apply suppression or deletion where required.
Which Actor should I use?
| Actor | Use it when | Price |
|---|---|---|
| Company Buyer Intent Lookup — Domain to Intent Topics | You have a company domain or LinkedIn company URL and want its buying-intent topics. | $0.005 per matched record ($5 per 1,000) |
| Find Companies by Buyer Intent — B2B Account Discovery | You have intent topics and want ranked companies researching them. | Preview up to 25 companies, then $0.005 per company result ($5 per 1,000) |
| B2B Contact Intent Enrichment — Email & LinkedIn Intent | You already have contacts or companies and want to add current intent topics. | $0.01 per matched contact record ($10 per 1,000) |
| Intent-Based Lead Finder — People Researching Any Topic | You have intent topics and want people researching them. | $0.02 per intent lead ($20 per 1,000) |
Support
Use the Issues tab on this Actor page with the run ID, expected behavior, and observed behavior. Do not include API tokens, credentials, customer data, or personal identifiers. CAG Signals responds to new issues within 24 hours.