Integration Guide
Enrich your Clay tables with B2B data from the ScraperCity API. Use Clay’s HTTP API column to find emails, validate contacts, pull leads by domain, or query the Lead Database - for every row in your table.
Clay’s HTTP API enrichment column lets you call any external API for every row in your table. You add a column, point it at a ScraperCity endpoint, map your table columns to the query parameters, and Clay runs the request for each row automatically - no Clay credits consumed.
The ScraperCity API base URL is https://app.scrapercity.com/api/v1. Every request authenticates with a Bearer token in the Authorization header. You can get your API key from app.scrapercity.com/dashboard/api-docs.
The most common patterns: enrich a list of company domains with decision-maker contacts from the Lead Database, validate a column of emails before sending, find business emails from a list of names and companies, or look up mobile phone numbers for high-value prospects. Each ScraperCity endpoint works the same way inside Clay - point the HTTP API column at it, add the Authorization header, and map your table columns to the query parameters.
Because ScraperCity is called via Clay’s generic HTTP API column rather than a native enrichment, you pay for your ScraperCity plan directly. The $49/mo and $149/mo plans cover Email Finder, Email Validator, Mobile Finder, Google Maps, and all other scrapers. The Lead Database endpoint (GET /database/leads) requires the $649/mo plan.
All ScraperCity endpoints can be called from the Clay HTTP API column using the same auth pattern. The table below lists the most commonly used ones for B2B lead enrichment workflows.
| Endpoint | Use Case | Key Parameters | Plan |
|---|---|---|---|
/database/leads | Pull contacts by company domain, title, seniority | companyDomain, title, seniority, hasEmail | $649/mo |
/email-finder | Find business email from name + domain | firstName, lastName, domain | All plans |
/email-validator | Verify deliverability, catch-all, MX records | All plans | |
/mobile-finder | Find mobile phone from LinkedIn URL or email | linkedinUrl or email | All plans |
/google-maps | Local business contacts with phones and emails | query, location, limit | All plans |
/website-finder | Scrape contact info from a company domain | domain | All plans |
The steps below show the Lead Database endpoint. The same pattern applies to every ScraperCity endpoint - only the URL and query parameters change.
In your Clay table, click “Add enrichment” and search for “HTTP API.” Select it. You will land on the Configure tab.
GEThttps://app.scrapercity.com/api/v1/database/leadsIn the Headers section, add:
AuthorizationBearer YOUR_API_KEYReplace YOUR_API_KEY with the key from app.scrapercity.com/dashboard/api-docs. Do not paste the key anywhere else in the column config - the Header Value field is the correct and secure place for it.
In the Query Parameters section, add the filters you want. Use curly braces to reference table columns dynamically:
companyDomain = {Company Domain}
hasEmail = true
limit = 5
title = {Target Title}You can reference any column in your table and map it to any API filter: title, seniority, industry, country, state, city, companyName, minEmployees, maxEmployees. String column values should be wrapped in quotes when constructing dynamic values - paste config into a plain text editor first to check for hidden characters if you see parse errors.
In the enrichment settings, configure rate limiting to stay within the ScraperCity API limits:
101000 (milliseconds)This keeps Clay at 10 requests per second. If you see 429 errors, reduce Request Limit to 5.
To avoid wasting API calls on rows missing required data, add a run condition. For example, only fire the enrichment when the Company Domain column is not empty:
{{Company Domain}} != ""Clay skips the API call entirely for rows that fail the condition, which keeps your ScraperCity usage clean and prevents errors from null parameter values.
Click “Test” to run the enrichment on one row. Verify the response contains the data array with contact records. If it works, run the full table. If you see an error, check the Troubleshooting section below.
The API returns a JSON object with a data array. After the HTTP API column runs, add “Extract Values from Data” columns to pull out individual fields:
data[0].email→First Contact Emaildata[0].first_name→First Contact Namedata[0].title→First Contact Titledata[0].linkedin_url→First Contact LinkedIndata[0].phone_number→First Contact Phonedata[0].company_name→Company Namedata[0].seniority→Seniority Levelpagination.total→Total Matching LeadsChange the array index (0, 1, 2...) to extract multiple contacts per company. Or use Clay’s “Insert all items” option to expand the full array into separate rows - useful when you want one Clay row per contact rather than one row per company.
For the Email Finder endpoint, the response is a flat object rather than an array. Extract fields directly: email, confidence, status. For Email Validator, extract valid, disposable, catchAll, and mxFound.
If you have a list of contacts with names and company domains but are missing email addresses, the Email Finder endpoint is the right choice. It does not require the $649/mo plan - it works on all ScraperCity plans.
Configure a second HTTP API column with these settings:
GEThttps://app.scrapercity.com/api/v1/email-finderQuery parameters:
firstName = {First Name}
lastName = {Last Name}
domain = {Company Domain}After the column runs, extract email and confidence from the response. Pipe the email result directly into an Email Validator column to confirm deliverability before adding contacts to any outreach sequence.
Start with a table of target account domains. Map companyDomain to each row. Set limit=5 and seniority=c_suite to find top executives at every account. Extract data[0] through data[4] to get up to five contacts per company, each in their own column.
Create a single-row table with static query parameters: title=VP of Sales, industry=computer software, country=United States, hasEmail=true, limit=100. Run once to pull 100 contacts matching your ideal customer profile. The Lead Database returns up to 100 per page and supports offset-based pagination across multiple rows.
Before pushing any contact to your outreach tool, add an Email Validator column pointing at /email-validator. Map the email column from a previous enrichment step. Filter out rows where valid=false or catchAll=true. This reduces bounce rates without any manual review.
Use the ScraperCity HTTP API column as one step in a Clay waterfall. If your primary email provider returns no result for a contact, use a conditional run formula to fall back to ScraperCity Email Finder. Only rows with an empty email column from step one will trigger the ScraperCity call.
After identifying decision-makers via the Lead Database, add a Mobile Finder column. Map the linkedin_url extracted from the Lead Database response to the linkedinUrl parameter. This appends a verified mobile number to your highest-priority prospects without running the lookup on your entire table.
Use the Google Maps endpoint instead of the Lead Database when targeting local businesses. Create a table of target locations or verticals, map each row to the query and location parameters, and pull back businesses with verified phone numbers and emails. Costs $0.01 per place and runs in minutes.
A common workflow after enriching contacts via ScraperCity is to push the results into a CRM. Clay’s native HubSpot integration handles this directly - no HTTP API column needed for the write step.
Once your ScraperCity columns have run and you’ve extracted the fields you need (email, first name, last name, title, company), add a HubSpot enrichment column to your table. Select “Create or Update Contact” and map the extracted ScraperCity fields to the corresponding HubSpot properties.
If you prefer to use the HubSpot API directly via HTTP API (for example, to create deals or tasks rather than contacts), add a second HTTP API column with a POST request to the HubSpot Contacts API. Map the data[0].email and other extracted fields as the request body properties.
This pattern - ScraperCity for contact enrichment, HubSpot for CRM sync - is one of the most common Clay workflows for outbound sales teams. ScraperCity fills in missing emails and phone numbers; Clay writes the enriched records straight into HubSpot without any manual CSV export.
Cause: Your API key is missing or formatted incorrectly.
Fix: Check that the Authorization header value reads exactly "Bearer YOUR_API_KEY" with a space between Bearer and the key. The header name must be "Authorization" (capital A). Do not include quotes around the full value.
Cause: The endpoint requires a higher plan.
Fix: The Lead Database endpoint (/database/leads) requires the $649/mo plan. If you are on $49/mo or $149/mo, use Email Finder, Email Validator, or Mobile Finder instead - those work on all plans.
Cause: You are sending requests faster than the API rate limit allows.
Fix: In the HTTP API column settings, reduce Request Limit to 5 and keep Duration at 1000. If errors persist, lower it further to 3.
Cause: A required query parameter is missing, empty, or malformed.
Fix: Check that the table columns mapped to required parameters are populated for the row you are testing. Add a conditional run formula to skip rows with empty key columns. If using a string formula, paste the value into a plain text editor to check for hidden characters before pasting into Clay.
Cause: The request succeeded but no contacts matched your filters.
Fix: Broaden your query: remove the title filter, increase limit, or check that companyDomain is a clean root domain (e.g. acme.com, not https://www.acme.com/). The API matches on exact domain, not URL.
Cause: The JSON path used in Extract Values does not match the actual response structure.
Fix: Click into the HTTP API column result for a single row to inspect the raw JSON. Confirm the path - for example, data[0].email requires that the data key is an array and the first item has an email field. Use pagination.total to confirm results were returned.
limit=3 or limit=5 instead of the maximum. You get the top contacts per account faster, and your daily quota goes further. You can always run a second pass for high-priority accounts with a higher limit.