Pull real-time infrastructure signals into any Clay table in under 5 minutes using the HTTP API enrichment block.
In Clay, create a new table or open an existing one. You can start with a list of company domains you want to monitor — one domain per row in a "Domain" column.
Click + Add enrichment → HTTP API. Configure it as follows:
| Field | Value |
|---|---|
| Method | GET |
| URL | https://forelight.net/v1/signals |
| Header: Authorization | Bearer YOUR_API_KEY |
| Param: apex_domain | {{Domain}} (your domain column) |
| Param: type | new_apex_domain |
| Param: limit | 10 |
This returns the 10 most recent signals for each company in your list.
The API returns a JSON object. Map these paths to Clay columns:
| Clay column name | JSON path |
|---|---|
| Signal Type | data[0].signal_type |
| Score | data[0].score |
| Domain | data[0].domain |
| Detected At | data[0].detected_at |
| Company Name | data[0].company_name |
| Industry | data[0].company_industry |
| SaaS Vendor | data[0].saas_vendor |
| Hosting Provider | data[0].hosting_provider |
| Total Signals | total |
data[0].score as a Clay filter column, or pass score_min=70 to filter at the database level before results are returned. Score ≥ 70 = high-conviction signal (geographic expansion, wildcard cert, SaaS adoption). Route high-score rows to immediate sequences; lower scores to nurture.
Use the type query parameter to focus on a specific signal:
| type value | Score | Use case |
|---|---|---|
| domain_velocity | 90 | 3+ new domains in 7 days — acquisition, rebrand, or major launch |
| geographic_expansion | 85 | Company registered a country-code domain — entering a new market |
| fresh_domain | 80 | Domain registered ≤30 days before first cert — brand new company launching infrastructure |
| wildcard_cert_issued | 70 | *.company.com — building out dynamic subdomain infrastructure |
| saas_adoption_detected | 65 | Company just adopted Shopify, HubSpot, Salesforce, Vercel, etc. |
| infrastructure_expansion | 50 | 5+ new subdomains in 24h — growth indicator |
| new_apex_domain | 40 | Company just registered a new top-level domain |
| new_subdomain | 20 | Company expanding infrastructure with a new subdomain |
One of the most powerful plays: trigger outreach when a company adopts a SaaS tool that's adjacent to yours.
Set up a Clay table with your target accounts. Add an HTTP API column with:
If data[0] is populated, this company just adopted that SaaS tool. Route them to your sequence.
Note: saas_vendor values are lowercase (e.g. shopify, hubspot, salesforce, okta, greenhouse, workday, zendesk). Check the API docs for the full list of detected vendors.
Each template is a complete Clay table setup — API call, field mappings, and suggested enrichment steps. Duplicate the pattern for your use case.
| Clay column | JSON path |
|---|---|
| Domain | data[0].domain |
| Company Name | data[0].company_name |
| Detected At | data[0].detected_at |
| Score | data[0].score |
| Industry | data[0].company_industry |
domain to get LinkedIn URL, employee count, and funding. Add "Find Decision Maker" to find the head of ecommerce or digital. Route score ≥ 70 rows to immediate email sequence (they adopted within 24h); score 65–69 to a slower nurture.
| Clay column | JSON path |
|---|---|
| Domain | data[0].domain |
| Apex Domain | data[0].apex_domain |
| Company Name | data[0].company_name |
| Detected At | data[0].detected_at |
| Score | data[0].score |
domain field is the country-code domain (e.g. acme.de). The apex_domain is the parent company domain (e.g. acme.com). Use apex_domain to enrich the company; use domain to infer which country they're expanding into.domain to identify the target country. Use Clay formula: =RIGHT(domain, LEN(domain)-FIND(".",domain)). Add Clay "Find Company" on apex_domain. Route to localization/regional sequences by country.
apex_domain from call 1 as the lookup key:
All query parameters are optional and combinable:
| Parameter | Description |
|---|---|
| apex_domain | Filter to a specific company domain (e.g. acme.com) |
| domain | Exact subdomain match |
| type | Signal type (see above) |
| saas_vendor | SaaS platform name (Shopify, HubSpot, Salesforce, Vercel, etc.) |
| industry | Company industry (e.g. retail, technology, finance) |
| hosting_provider | AWS, Cloudflare, GCP, etc. |
| since | ISO 8601 timestamp — only signals after this time |
| score_min | Minimum score (1–100) — filter in ClickHouse before results are returned. Use score_min=65 to drop low-signal noise. |
| limit | Number of results (default 100, max 1000) |
| cursor | Pagination cursor from previous response |
since with a rolling Clay formula to only pull new signals each run. Add score_min=65 to drop low-signal noise at the database — only high-conviction signals reach your Clay table.
?since= — the efficient way to pollThe most API-efficient Clay setup: poll for only new signals since your last run for only the accounts you care about. Two params make this work together.
Step 1 — Add your target accounts to a watchlist (once, via API):
Once set, every signal query for your key automatically filters to watchlisted accounts — no apex_domain= param needed per row.
Step 2 — Poll with a rolling ?since= timestamp. In Clay, create a formula column that generates an ISO 8601 timestamp 24 hours in the past:
Pass this as the since param in your HTTP API enrichment block:
| Field | Value |
|---|---|
| URL | https://forelight.net/v1/signals |
| Param: since | {{Rolling Date}} (your formula column) |
| Param: score_min | 65 |
| Param: limit | 5 |
This query costs a single API credit regardless of how many matching signals exist. Running it daily against 500 watchlisted accounts uses 500 credits — well within Starter quota. Combine with score_min=65 to eliminate low-signal noise at the database level before the response is returned.
?since= window means you only see new signals each run, so you can trigger outreach on first detection rather than re-processing the same signals every day.
On Starter and Pro tiers, use POST /v1/signals/batch instead of per-row GET calls. This is dramatically faster for large Clay tables and uses the same quota (1 credit per domain).
Response groups signals by domain — map data["acme.com"][0].score directly to a Clay column. Use in a Clay HTTP API enrichment block with method POST and JSON body.
Instead of polling the API from Clay, register a webhook to receive signals the moment they're detected. Use this to create records, update lead scores, or trigger sequences automatically.
Forelight sends a POST to your URL for every new signal that matches your watchlist. The payload is a single SignalOut object — identical schema to the GET /v1/signals response. If you set a secret, each request includes an X-Forelight-Signature header (HMAC-SHA256 of the raw body).
HubSpot setup: Use a Zapier or Make.com webhook as the relay. Trigger: webhook catch → Action: HubSpot "Create or update contact/company" with apex_domain as the lookup key. Map signal_type, score, and score_reason to custom properties.
Salesforce setup: Use Salesforce Flow or a platform event. Relay via Zapier: webhook catch → Salesforce "Create record" on a custom Signal__c object with fields Signal_Type__c, Score__c, Apex_Domain__c, and Detected_At__c.
POST /v1/watchlists) and the webhook will only fire for those accounts — no noise, no filtering needed downstream.
Email hello@forelight.net or check the full API docs.