Clair API
SERP & Search API→Results from Google Search, News, and Maps.News & Media API→Live publisher pages, fetched when you call.Jobs & Hiring API→Live job listings from Glassdoor, Indeed, and Greenhouse.E-commerce API→Live listings from public marketplaces.Company Data & Reviews API→Public company profiles, reviews, ratings, and product launches.Contact & Lead Data API→Emails, phones, and social URLs from public sites.
Browse the full catalog →Missing a data surface? Ask for one →

Explore resources

Use casesWays to build with Clair data.ComparisonsClair against other APIs, sourced.GlossaryWeb data terms, with real fields.

Use cases

View all →
Amazon price monitoring→Prices, Buy Box sellers, and stock per ASIN.Google rank tracking→Daily positions for your keywords, with SERP features.Lead enrichment from company websites→Emails, phones, and socials a domain publishes.Trustpilot review monitoring→New reviews, TrustScore, and replies per company.Product Hunt launch tracking→Daily launches, makers, and websites by topic.
PricingDocs
Dashboard
APIs/Contact & Lead Data

Website Contacts API

Public emails, phones, socials, and addresses from a company domain.

  • Free tier, 200 requests a month
  • No credit card
  • Structured JSON
  • Live pages, fetched per call
Start freeView documentation
  • Data samples
  • Code
  • Reference
  • Pricing
  • FAQ
Start free

Data samples

From the page to JSON

The page the Website Contacts API reads, and the response it returns for the same query.

domain

stripe.com

Try it live

https://stripe.com/

Lookup source page
{
  "domain": "stripe.com",
  "url": "https://stripe.com/",
  "pages": [
    {
      "url": "https://stripe.com/",
      "type": "home"
    },
    {
      "url": "https://stripe.com/about",
      "type": "about"
    },
    {
      "url": "https://stripe.com/privacy",
      "type": "privacy"
    }
  ],
  "company": {
    "name": "Stripe",
    "legal_name": "Stripe, LLC",
    "description": "Stripe powers online and in-person payment processing and financial solutions for businesses of all sizes.",
    "logo": "https://images.stripeassets.com/fzn2n1nzq965/1hgcBNd12BfT9VLgbId7By/01d91920114b124fb4cf6d448f9f06eb/favicon.svg",
    "country": "US",
    "language": "en-US"
  },
  "emails": [
    {
      "value": "privacy@stripe.com",
      "type": "generic",
      "domain_match": true,
      "sources": [
        "https://stripe.com/privacy"
      ]
    }
  ],
  "phones": [
    {
      "e164": "+18889262289",
      "raw": "+1 888 926 2289",
      "type": "phone",
      "country": "US",
      "sources": [
        "https://stripe.com/"
      ]
    }
  ],
  "social": [
    {
      "network": "linkedin",
      "handle": "stripe",
      "url": "https://www.linkedin.com/company/stripe",
      "sources": [
        "https://stripe.com/"
      ]
    }
  ],
  "addresses": [
    {
      "street": "920 5th Avenue, Suite 1900",
      "locality": "Seattle",
      "region": "WA",
      "postal_code": "98104",
      "country": "US",
      "sources": [
        "https://stripe.com/"
      ]
    }
  ],
  "people": [
    {
      "name": "Patrick Collison",
      "job_title": null,
      "email": null,
      "phone": null,
      "sources": [
        "https://stripe.com/"
      ]
    }
  ]
}

Source page captured separately from the recorded response, so live values can differ.

Code

Integrate in minutes

One host, one Bearer key for every Clair API. Each call returns JSON with the same envelope, so a second API is a new path, not a new client.

Get an API keyRead the docs
curl -G "https://api.clair.im/v1/contacts?domain=stripe.com" \
  -H "Authorization: Bearer YOUR_API_KEY"

Reference

Query and response fields

Public pages only. Default five pages (home plus four linked). Extra pages never use a paid scrape.

GET /v1/contacts

Authorization

header · stringrequired

Bearer <api_key>. Create keys under API keys.
domain

stringrequired

Public hostname, with or without https://. IPs and localhost are rejected.
pages

integer

Total pages including home. Default 5, min 1, max 8.
match_email_domain

string

true to keep only emails on the queried domain. Default false.

Pricing

Simple plans, free to start

This API is its own subscription with its own quota. Unused requests expire at renewal. Need a custom volume? Email contact@serinlabs.com.

Free

$0/mo

200

Requests / month

Overage
Hard limit
Rate limit
10/min
Card
Not needed
Start for free

Pro

$49.99/mo

3,700

Requests / month

Overage
$0.0134 per extra request
Rate limit
5/sec
Stops at
18,500 requests
Subscribe

Most popular

Ultra

$149/mo

14,800

Requests / month

Overage
$0.0101 per extra request
Rate limit
10/sec
Stops at
44,400 requests
Subscribe

Mega

$399/mo

49,600

Requests / month

Overage
$0.0081 per extra request
Rate limit
20/sec
Stops at
124,000 requests
Subscribe

Pay as you go

No monthly fee

$0.0201

Per request

Overage
None
Rate limit
5/sec
Stops at
18,500 requests
Subscribe

Prices in USD, billed monthly by Stripe. Cancel any time from Manage billing.

FAQ

Common questions

Anything else? Email contact@serinlabs.com.

What does the Website Contacts API return?+

Live scrape of a company’s public website. The homepage may use one paid fetch; extra same-origin pages (contact, about, imprint, team, support, privacy) are free fetches from homepage links. Returns emails, phones, social profiles, JSON-LD addresses, company metadata, and named people. It does not log in, walk a sitemap, or buy a lead database.

How is a request counted?+

Each call is one request, and each extra page is a new call. A malformed request (400) is not counted, and a request that fails on our side (5xx) is refunded.

Is there a free tier?+

Yes. Every Clair API has its own free tier: 200 requests a month, with no card. It resets monthly, and the API stops when the month's requests run out.

What happens when I use up my plan's requests?+

On a paid tier, extra calls are billed at the tier's overage rate until its ceiling, then the API returns 429 until the next period. The free tier returns 429 as soon as its requests are used.

Does this subscription cover other Clair APIs?+

No. Each API is its own subscription, and one key works with all of them. A call to an API the account does not subscribe to returns 403 not_subscribed.

Subscribe to the API you need.

Each Clair API is its own monthly request quota. Unused requests expire. Every API has a free tier to try it.

Get API Key →Compare plans
Clair API

Developer APIs for public search, editorial news, active job postings, website contacts, reviews, and product launches—with provenance, freshness, and coverage boundaries kept visible.

contact@serinlabs.com@clair_api

Products

SERP & Search APINews & Media APIJobs & Hiring APIE-commerce APICompany Data & Reviews APIContact & Lead Data API

Documentation

OverviewQuickstartGoogle Search APIGoogle News APIGlassdoor APIContacts APITrustpilot APIProduct Hunt APIPricing

Resources

Resource catalogUse casesComparisonsGlossary

Legal

TermsPrivacy
© 2026 Serin Technologies, LLC