B2B Contact Intent Enrichment — Email & LinkedIn Intent avatar

B2B Contact Intent Enrichment — Email & LinkedIn Intent

Pricing

from $7.00 / 1,000 matched contact records

Go to Apify Store
B2B Contact Intent Enrichment — Email & LinkedIn Intent

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

CAG Signals

Maintained by Community

Actor 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:

Illustrative contact-enrichment dataset table

input_identity_typematchedtop_topic_nameintent_scoreintent_percentiletopic_count
lead-1persontrueMarketing Automationhigh922

Tutorial: add intent signals to an existing list

Run it in Apify Console

  1. Open the Actor and select Start.
  2. Keep the prefilled example and previewMode enabled.
  3. 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.
  4. Confirm that every input has your own opaque id; paid output returns it as input_id so you can join results back to the source list.
  5. Disable previewMode only 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
}
  • entityType is person for email / linkedin_url, or company for domain / linkedin_company_url.
  • items accepts up to 10,000 records in live mode. Preserve your own join key in id.
  • previewMode dry-runs at most 25 inputs and returns an exact count rather than paid intent rows.
  • includeUnmatched keeps uncharged unmatched rows in paid output so the dataset remains easy to join.
  • demoMode returns deterministic, clearly labeled example data and does not emit paid result events.

Output fields

  • record_type distinguishes DATA, ERROR, SUPPRESSED, and the final SUMMARY row.
  • input_id preserves your correlation key; entity_type, matched, and matched_on describe resolution.
  • top_topic_name, intent_score, and intent_percentile describe the strongest returned topic.
  • topic_count and topics retain the full topic set.
  • preview, data_date, data_source, contract_version, and retrieved_at describe the run and source.
  • SUPPRESSED rows are unmatched and contain only the caller's opaque input_id, status fields, and no person identifier.
  • The SUMMARY row 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?

ActorUse it whenPrice
Company Buyer Intent Lookup — Domain to Intent TopicsYou 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 DiscoveryYou 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 IntentYou 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 TopicYou 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.