Adoption and churn signals API
Find domains that just adopted or dropped a technology, scoped by technology or category, with confidence scoring and firmographic filters. Costs 1 credit per request.
Frequently asked questions
What is the difference between count and total_sites?
What is the difference between count and total_sites?
count is how many rows came back in this response, capped by your limit. total_sites is the corpus-wide number of distinct sites with this event in the window, ignoring limit entirely. Use total_sites for headline figures like “2,847 sites installed this technology this month” and count only to page through rows. total_sites can be null on very large categories if the count query runs too long — the row list still returns.How should I read the confidence score?
How should I read the confidence score?
confidence with a score from 0 to 100 and a label. It combines three things: how reliable the detection method is, how many distinct scans saw the technology (detection_count), and how consistently it was seen (detection_rate). A detection seen on only one scan caps at medium no matter how reliable the method, because a single snapshot is not corroboration. A churn with fewer than 2 detections caps at low — if we only ever caught the technology once, its removal is unconfirmed.Why do I get fewer results when I add a country filter?
Why do I get fewer results when I add a country filter?
total_sites. The response’s firmographics.note says so explicitly. If you want company data attached without losing rows, pass company=true on its own instead.What does the first-seen gate do on adoption?
What does the first-seen gate do on adoption?
excludes_first_seen: true. Set include_first_seen=true to turn the gate off, which gives you a newly-discovered-domains feed rather than genuine adoption.Can I scope a signal to a whole category?
Can I scope a signal to a whole category?
category_id instead of a technology and the query fans out to every detectable technology whose primary category is that one, with each result row naming the specific technology involved. Note that primary category is the only axis used, so a tool cross-listed elsewhere will not appear under a secondary category.Why is there a separate rate limit on signals?
Why is there a separate rate limit on signals?
/v1/signals/* carries an additional per-key limit of 10, 30 or 60 requests per minute depending on plan, on top of your general plan limit. A signals 429 identifies itself with "scope": "signals" in the error details.Authorizations
API key in format tapi_live_[32-char] (live) or tapi_test_[32-char] (test)
Path Parameters
The signal type. churn = a technology the domain had is now gone. adoption = a technology the domain newly started using.
churn, adoption "adoption"
Query Parameters
Scope by BuiltWith technology id. Provide exactly one of technology_id, technology or category_id.
Scope by exact technology name. The technology must be detectable.
Scope by category — fans out to every detectable technology whose primary category is this one. Each result row names the specific technology.
Look-back window in days. Accepts 30 or 30d. Clamped to 1–365.
Rows returned. Clamped to 1–1000.
1 <= x <= 1000Minimum detection_rate for a row to be returned.
0 <= x <= 1Adoption only. true disables the first-seen gate and counts first-time-crawled domains as adopters — a newly-discovered-domains feed, not genuine adoption.
Filter to companies in this country (case-insensitive).
Filter to companies in this city (case-insensitive).
Filter to companies in this state or region (case-insensitive).
Filter to companies in this industry (case-insensitive).
Filter by exact LinkedIn industry code.
Filter by exact LinkedIn employee band. Unknown bands are rejected with INVALID_EMPLOYEE_BAND and the allowed list.
Filter by exact company type.
Only companies founded in or after this year.
1800 <= x <= 2025Only companies founded in or before this year.
1800 <= x <= 2025Set to true to attach the company card without filtering results (enrich-only mode).
Filter to domains where the crawler found (or did not find) an email address. false is a real filter, not a no-op.
Filter to domains where the crawler found (or did not find) a phone number.
Filter to domains publishing a profile on this platform.
linkedin, x, facebook, instagram, youtube, github, tiktok, discord, reddit, crunchbase, slack Filter by the site's primary language.
Filter by the country the site declares in its schema.org markup. Accepts ISO-2, English name or common variants.
Apply a saved audience instead of inline filters. Filter audiences replay their firmographic predicates; list audiences restrict rows to their member domains. Mutually exclusive with inline firmographic parameters.