Everything in the dashboard is in the API

Lanes, keywords, checks, estimates, exports, leads, websites, workspaces, exclusions and webhooks. Run it from your own code, a script or an AI agent.

Plug it into what you already run

Pull leads into your CRM, push visitors to your sequencer, or let an AI agent run your lanes.

PullLeads to you

  • REST APIJSON over HTTPS
  • CLIOne-line install
  • CSVSheets, Excel
Intent Leads

PushAs it happens

  • WebhooksSigned, to your CRM
  • Google Tag ManagerVisitor ID tag

AI agentsRun your lanes

  • MCP serverRemote MCP
  • ClaudeOver MCP
  • CursorOver MCP

The same export, three ways

  • Free quote first. A dry run shows how many new people you'd get and the price, without buying.
  • Pull what's new. since=last returns only people you haven't pulled yet.
  • Keys per workspace, or one organization key that works across them all.
MCPhttps://mcp.intentleads.si/mcp
# A free quote first, then only people you don't havecurl -X POST https://intentleads.si/api/v1/exports \  -H "Authorization: Bearer $KEY" \  -d '{"lanes":["L1"],"max":500,"dry_run":true}' # Everything new since your last pullcurl "https://intentleads.si/api/v1/leads?since=last" \  -H "Authorization: Bearer $KEY"

Every lead says who they are, how to reach them, and why they're here

Intent, Search and website leads share one format: in the dashboard, the CSV, the API and the webhook.

GET /api/v1/leads?since=last200
{
  "person_id": "7c1e9b02-…-a42f",
  "lane": "L1",
  "first_name": "Maya",
  "job_title": "VP Sales",
  "company": "Northwind Surgical",
  "business_email": "m.thornton@…",
  "email_status": "valid",
  "personal_email": "maya.t…@gmail.com",
  "mobiles": [
    { "number": "+16125550142", "dnc": false },
    { "number": "+16125550198", "dnc": true }
  ],
  "keywords_matched": ["selling to ambulatory…"],
  "intent_strength": "high",
  "seen_before": false
  // …and 27 more fields
}

A person ID that lasts

The same for someone across months and lanes, so your CRM can match them instead of creating duplicates.

Every mobile, flagged

All the mobiles we have, each with its own do-not-call flag, plus the business email's validation status.

The reason, attached

The topics they researched and how strongly, or the pages they visited. Your first line writes itself.

Every CSV column 70 in all
First NameLast NameJob TitleSeniorityStandard TitleDepartmentJob FunctionSub-departmentsHeadlineTitle HistoryEmployer HistoryEducationLinkedIn ConnectionsCompanyWebsiteIndustryNAICSSICEmployeesEmployee RangeRevenueRevenue RangeCompany AddressCityStateCompany ZIPCompany CountryCompany DescriptionHome CityHome StateHome ZIPHome CountryAge RangeGenderHousehold IncomeNet WorthHomeownerMarriedChildren at HomeBusiness EmailEmail StatusPersonal EmailMobileMobile on DNCDirect PhoneCompany PhoneLinkedInCompany LinkedInX (Twitter)GitHubIntent TopicsIntent ScoreLast ActiveVisited PageVisited AtPhotoLinkedIn HeadlineCurrent Title (LinkedIn)Current Company (LinkedIn)Location (LinkedIn)LaneKeywords MatchedIntent StrengthFirst SeenExportedSeen BeforeSuppressedLead IDPerson IDAll Mobiles

Visitors and removals, pushed to you

Add as many endpoints as you need and pick their events. Exports stay pull-only: a webhook never buys anyone.

Signed

In the Standard Webhooks format, so the open-source libraries check it in one line. Checking is up to you.

Retried until they land

A failing endpoint is retried with backoff and never holds up your others. Every attempt is logged.

Test with sample data

Send a signed test of any event, marked as a test, and see exactly what your endpoint answered.