Built for developers and AI agents

One API for 14M+ online businesses

ListSignal does two things. It keeps a record of every online business: what it is, what it runs, what it sells, what it earns. And it tracks what changes: a technology added or removed, hiring started, a revenue band moved, a website down. Both are one key away, by REST or from any MCP-capable AI agent. Free tier, no card, no sales call.

Quickstart

  1. Create a free account and generate an API key in Settings. 1,000 lookups/month included.
  2. Call the API with your key:
The call
curl https://listsignal.com/api/v1/company/gymshark.com \
  -H "Authorization: Bearer ls_YOUR_KEY"
What comes back (abridged)
{
  "data": {
    "domain": "gymshark.com",
    "http_title": "Gymshark Official Store",
    "estimated_business_model": "Ecommerce",
    "estimated_industry": "Fashion",
    "estimated_revenue": "$100M-$1B",
    "estimated_revenue_confidence": 0.91,
    "estimated_employees": "501-5000",
    "estimated_country": "GB",
    "http_tech": ["Shopify", "Klaviyo", "Gorgias", "Cloudflare"],
    "dns_email_provider": "Google Workspace",
    "shop_product_count": 1840,
    "shop_price_avg": 38.5,
    "hr_job_count": 42,
    "hr_departments": ["Engineering", "Marketing"],
    "http_emails": ["[email protected]"],
    "http_last_seen_at": "2026-10-01 06:12:40",
    "changes": [
      {"field": "http_tech", "change": "added", "value": "Gorgias",
       "changed_at": "2026-09-28 11:02:17", "summary": "Gorgias added"},
      {"field": "hr_job_count", "change": "started", "value": "42",
       "changed_at": "2026-09-20 08:40:03", "summary": "started hiring (42 roles)"}
    ]
  }
}
curl "https://listsignal.com/api/v1/search?tech=Shopify&country=FR&hiring=true&limit=25" \
  -H "Authorization: Bearer ls_YOUR_KEY"

curl "https://listsignal.com/api/v1/changes?field=http_tech&change=added&value=Klaviyo&period=7d" \
  -H "Authorization: Bearer ls_YOUR_KEY"

Endpoints

GET /api/v1/company/:domain

One company's full record: every field in the dictionary below under its own name, plus changes, its last 20 recorded changes. Contact emails and phone on paid plans.

GET /api/v1/search

Filter companies by tech (one name: a platform, a vendor, a WordPress plugin or a Shopify app), dns_tech, email_provider, country, business_model, industry, revenue, employees, hiring, shopify. Ranked by traffic, up to 100 per page.

GET /api/v1/changes

The change feed, newest first. Filter by field, change (added, removed, changed, started, stopped, down, back), value, domain, country, business_model, period (24h, 7d, 30d, 90d). Every row carries a one-line summary.

GET /api/v1/technologies

Every tracked technology, plugin and app with live company counts, its category and its ecosystem.

GET /api/v1/stats

Live dataset statistics and the list of tracked fields, refreshed every 60 seconds. Citable.

Full machine-readable contract: /openapi.json (OpenAPI 3.1). Errors are RFC 9457 application/problem+json with actionable detail, so agents self-correct in one retry.

Signals: what changed

Every business is re-checked on a weekly to monthly cadence. When a tracked field moves between two checks, one change row is recorded and never rewritten. You read them in the dashboard's Signals tab, export them as CSV, or page through /api/v1/changes. A change is one of:

Change On Reads as
added, removedhttp_tech, dns_tech, hr_departments, http_emails, http_social_links, ctl_subdomainsKlaviyo added
changedestimated_business_model, estimated_industry, estimated_revenue, estimated_employees, estimated_country, verified_revenue, verified_employees, http_title, http_meta_description, dns_email_provider, shop_theme, shop_plus, shop_product_count (20% or more), news_last_funding_usdfrom $1M-$10M to $10M-$100M
started, stoppedhr_job_countstarted hiring (12 roles)
down, backhttp_statuswebsite down (502)

Every field, by name

The same names everywhere: the API, the dashboard, the CSV. The prefix tells you where a value comes from. http_ the website, http_deep_ the deep pass over the site, dns_ DNS, ctl_ certificate logs, rdap_ the registry, bgp_ the hosting network, shop_ the store catalog, hr_ the job board, news_ news. estimated_ means a rule or a model produced it, and it comes with _confidence and _evidence. verified_ means a public registry said it. A signal mark means a change on that field is recorded.

Field Type Meaning Signal
domain text The registrable domain, lowercase, no scheme.
ctl_first_seen_at date When the domain first appeared in a certificate log.
ctl_last_seen_at date Last crawl that carried certificate data.
http_first_seen_at date First successful fetch of the website.
http_last_seen_at date Last successful fetch of the website (HTTP 2xx or 3xx).
http_last_checked_at date Last fetch attempt, whatever the outcome.
estimated_business_model text What the business is: Ecommerce, SaaS, Agency, Marketplace, Tool, Media, Consulting, LocalBusiness and more. Rules plus a text classifier. changed
estimated_business_model_confidence number 0 to 1.
estimated_business_model_evidence text Which tier decided it: heuristic rules, the ML head, or a government TLD rule.
estimated_industry text Industry label from the same classifier. changed
estimated_industry_confidence number 0 to 1. One classifier emits model and industry together today, so it equals the model confidence.
estimated_revenue text Annual revenue band: <$1M, $1M-$10M, $10M-$100M, $100M-$1B, $1B+. changed
estimated_revenue_confidence number 0 to 1, grows with the number of independent signals.
estimated_revenue_evidence text The signals the estimate rests on, pipe-separated, strongest first.
estimated_employees text Headcount band: 1-10, 11-50, 51-500, 501-5000, 5001+. changed
estimated_employees_confidence number 0 to 1. Same estimator run as revenue.
estimated_employees_evidence text Same evidence trail as revenue.
estimated_country text ISO-2 country, from a VAT or registration number on the page, else the registrant country, else TLD, language and hosting. changed
estimated_country_evidence text Which inputs decided the country.
estimated_country_confidence number 0.95 from a registration number on the page, 0.85 from the registrant, 0.6 from TLD, language and hosting.
estimated_hq_location text City or address of the head office.
estimated_hq_location_evidence text registry or about page.
estimated_summary text One-line description of what the business does.
estimated_summary_evidence text registry or about page.
estimated_junk text Empty when the site looks like a real business; parked or placeholder otherwise. Follows the newest successful fetch. changed
estimated_realness text How much evidence says this is an operating business, 0 to 1. 0.5 and up: mail, a contact and 90 days of certificates; 0.7 and up adds traffic, a catalogue or jobs, a registry match or a company number. 0 when junk.
estimated_realness_evidence text The facts behind estimated_realness, '|' separated (mx, dmarc, contact, address, company_id, schema_org, age_90d, activity, traffic, social, registry).
estimated_at date When the estimates were last produced.
http_tech list Every technology, platform, plugin and app detected on the website, canonical names from the tech catalog. added, removed
http_script_domains list Third-party hosts the homepage loads scripts from.
dns_tech list Vendors found in DNS: email senders from SPF and DKIM, verification records, CNAME targets. added, removed
dns_email_provider text Who hosts the mailboxes: Google Workspace, Microsoft 365, Zoho, Proton, self-hosted. changed
http_emails list Email addresses published on the site. Paid plans only in the API. added
http_emails_evidence text Which pages the addresses came from.
http_phone text Phone number from the footer or JSON-LD.
http_address text Postal address from the footer or JSON-LD.
http_social_links list Social profile URLs linked from the site. added
http_company_id text Company registration or VAT number printed on the site, the key into public registries.
http_nav_links list Main navigation link texts.
http_title text Homepage title. changed
http_meta_description text Homepage meta description, usually the tagline. changed
http_h1 text Homepage H1.
http_language text Page language, BCP-47.
http_schema_type text Main schema.org type declared in JSON-LD.
http_pages_found list Paths discovered on the homepage: /pricing, /about, /careers, /contact.
http_status number HTTP status of the last attempt. down, back
http_error text Fetch error of the last attempt, empty when it succeeded.
http_blocked text The WAF or bot wall in the way, empty when none is outstanding.
http_response_ms number Homepage response time.
http_deep_seo_score number 0 to 100, see /scoring/seo-score.
http_deep_seo_issues list What the score lost points on.
http_deep_word_count number Visible words on the homepage.
http_deep_alt_ratio number Share of images with alt text.
http_deep_lcp_ms number Largest Contentful Paint, measured in a browser when one was used.
http_deep_cls number Cumulative Layout Shift.
http_deep_ttfb_ms number Time to first byte.
http_deep_pricing_points number Count of prices printed on the pricing page.
http_deep_sitemap_urls number URLs in the sitemap.
http_deep_sitemap_products number Product URLs in the sitemap.
http_deep_sitemap_blog number Blog URLs in the sitemap.
http_deep_sitemap_children number Child sitemaps.
http_deep_sitemap_lastmod date Newest lastmod in the sitemap.
http_deep_last_seen_at date Last successful deep pass.
hr_job_count number Open roles on the public job board. started, stopped
hr_ats text Applicant tracking system: Greenhouse, Lever, Ashby, Workable and more. changed
hr_departments list Departments with open roles. added
hr_locations list Locations of open roles, most frequent first.
hr_last_seen_at date Last successful read of the job board.
ctl_has_hiring_subdomain flag A careers or jobs host exists in the certificate logs.
shop_product_count number Products in the public catalog. changed by 20% or more
shop_new_products_30d number Products added in the last 30 days.
shop_last_product_at date Newest product's publication date.
shop_price_min number Lowest product price.
shop_price_avg number Average product price.
shop_price_max number Highest product price.
shop_oos_ratio number Share of products out of stock.
shop_discount_depth number Mean markdown against compare-at price.
shop_vendor_count number Distinct vendors: 1 is a brand, many is a retailer.
shop_catalog_age_days number Age of the oldest product.
shop_product_types list Product types in the catalog.
shop_theme text Shopify theme name. changed
shop_theme_store_id number Theme store id, 0 for a custom theme.
shop_currency text Shop currency. changed
shop_locales number Storefront locales. changed
shop_plus number 1 on Shopify Plus. changed
shop_last_seen_at date Last successful catalog read.
verified_revenue text Revenue band from a public registry (SEC EDGAR, Companies House, Wikidata). changed
verified_revenue_evidence text The registry it came from.
verified_employees text Headcount band from a public registry (Companies House, SIRENE, Wikidata, YC). changed
verified_employees_evidence text The registry it came from.
verified_industry text Industry as recorded by the registry (NAF, SIC, Wikidata).
verified_founded_year number Year of incorporation.
verified_at date Last registry lookup that returned a fact.
dns_a list IPv4 addresses.
dns_mx list Mail exchangers.
dns_dmarc text DMARC policy: none, quarantine, reject.
dns_bimi text BIMI logo record.
dns_dkim text DKIM selectors found.
dns_last_seen_at date Last crawl where the domain resolved.
ctl_tld text Top-level domain.
ctl_issuer text Certificate authority of the newest certificate.
ctl_subdomain_count number Distinct hosts seen in certificates.
ctl_subdomains list Hosts seen in certificates: app, api, shop, careers and the like. added
rdap_created_at date Domain registration date.
rdap_expires_at date Domain expiry date.
rdap_updated_at date Last registration update.
rdap_registrar text Registrar.
rdap_nameservers list Nameservers.
rdap_status list EPP status codes.
rdap_registrant_country text Registrant country when the registry publishes it.
rdap_last_seen_at date Last registry read.
bgp_asn text Autonomous system number of the hosting network.
bgp_asn_org text Hosting network operator: Cloudflare, Amazon, Hetzner and the like.
bgp_country text Country of the hosting network.
bgp_last_seen_at date Last crawl with a network lookup.
tranco_rank number Tranco traffic rank, lower is bigger.
majestic_rank number Majestic Million rank.
majestic_ref_subnets number Referring subnets, a backlink breadth measure.
news_count number News items collected.
news_last_funding_usd number Largest funding amount reported. changed
news_last_seen_at date Newest news item.

MCP server, for AI agents

ListSignal speaks the Model Context Protocol natively. Point Claude, Cursor, or any MCP client at the endpoint and it gets three tools: listsignal_get_company (the full record with its recent changes), listsignal_search_companies, and listsignal_dataset_stats.

{
  "mcpServers": {
    "listsignal": {
      "type": "http",
      "url": "https://listsignal.com/mcp",
      "headers": { "Authorization": "Bearer ls_YOUR_KEY" }
    }
  }
}

Streamable HTTP transport, stateless, JSON-RPC 2.0. The same key and quota as the REST API.

Plans and limits

Plan Calls / month Rate Contact emails and phone
Free1,00030 / minContactability only
Starter5,00060 / minIncluded
Pro25,000120 / minIncluded

Only successful calls count against the quota. You never pay for a miss. Need more volume, webhooks, or bulk delivery? Email us.