Build lists of companies that use a given technology, from your AI assistant, no-code workflow or own code.
Pick your tool, copy the line and paste it in. The AI does the setup. You only paste your API key when it asks.
Set up the Datablist Find Companies by Technologies API for me.
Here's the documentation: github.com/b1b1h-m1k3r/datablist-api-setup
Set up the Datablist Find Companies by Technologies API for me.
Here's the documentation: github.com/b1b1h-m1k3r/datablist-api-setup
Set up the Datablist Find Companies by Technologies API for me.
Here's the documentation: github.com/b1b1h-m1k3r/datablist-api-setup
Set up the Datablist Find Companies by Technologies API in Make for me.
Here's the documentation: github.com/b1b1h-m1k3r/datablist-api-setup
Set up the Datablist Find Companies by Technologies API in n8n for me.
Here's the documentation: github.com/b1b1h-m1k3r/datablist-api-setup
Set up the Datablist Find Companies by Technologies API in Zapier for me.
Here's the documentation: github.com/b1b1h-m1k3r/datablist-api-setup
Let an AI assistant or your automation tool do the setup, or call the REST API from your own code.
Copy the prompt for Claude, ChatGPT or Cursor, or for Make, n8n or Zapier, and paste it in. The AI creates a Datablist folder on your computer and sets everything up.
When the AI asks, copy your API key from the Datablist app and paste it into the .env file it opened. Never paste it into the chat.
Pick a technology and your filters and get one row back per company: website, company name, industry, size, social links and contact details.
See a sample resultUse the HTTP request module or node your tool offers. You need three steps: start the task, wait, then read the results.
POSThttps://api.datablist.com/v1/sources/tasksX-API-Key = your API keyContent-Type = application/json{
"sourceId": "technologies-source",
"uniqueId": "technologies-source-run-1",
"settings": {
"technologies": [
"shopify"
],
"countries": [
"DE"
],
"companySizes": [
"50"
],
"subset": 100
}
}@id from the response. That is your task ID.Add a short wait or delay, then a GET request to https://api.datablist.com/v1/sources/tasks/TASK_ID with the same X-API-Key header. Repeat until status is completed.
GET https://api.datablist.com/v1/sources/tasks/TASK_ID/results?limit=50. Map the fields of each result to your columns. If nextCursor is not empty, call again with &cursor= plus that value.
Create a task with one request. The full script with polling and results is in the developer section.
curl --request POST 'https://api.datablist.com/v1/sources/tasks' \ --header 'X-API-Key: YOUR_PERSONAL_API_KEY' \ --header 'Content-Type: application/json' \ --data '{ "sourceId": "technologies-source", "uniqueId": "technologies-source-run-1", "settings": { "technologies": [ "shopify" ], "countries": [ "DE" ], "companySizes": [ "50" ], "subset": 100 } }'
import requests
response = requests.post(
"https://api.datablist.com/v1/sources/tasks",
headers={"X-API-Key": "YOUR_PERSONAL_API_KEY"},
json={
"sourceId": "technologies-source",
"uniqueId": "technologies-source-run-1",
"settings": {
"technologies": [
"shopify"
],
"countries": [
"DE"
],
"companySizes": [
"50"
],
"subset": 100
}
},
)
task = response.json()
print(task["@id"], task["status"])const response = await fetch("https://api.datablist.com/v1/sources/tasks", { method: "POST", headers: { "X-API-Key": "YOUR_PERSONAL_API_KEY", "Content-Type": "application/json", }, body: JSON.stringify({ "sourceId": "technologies-source", "uniqueId": "technologies-source-run-1", "settings": { "technologies": [ "shopify" ], "countries": [ "DE" ], "companySizes": [ "50" ], "subset": 100 } }), }); const task = await response.json(); console.log(task["@id"], task.status);
Find the websites and companies that use a technology or a whole category, narrowed by country, language, industry, size and keywords. No Datablist workspace, collection or import needed.
Put Find Companies by Technologies wherever your data already flows.
Pay per lookup with credits. API access starts on the Growth plan.
Tell us how many companies you need and we'll show you the cheapest way to get them.
Everything you need to call the REST API directly: code, responses, endpoints, fields, authentication and limits.
A complete script that creates a task, waits for it and prints every result. Replace YOUR_PERSONAL_API_KEY with your key.
# 1. Create the task (returns 202 Accepted and the task "@id") curl --request POST 'https://api.datablist.com/v1/sources/tasks' \ --header 'X-API-Key: YOUR_PERSONAL_API_KEY' \ --header 'Content-Type: application/json' \ --data '{ "sourceId": "technologies-source", "uniqueId": "technologies-source-run-1", "settings": { "technologies": [ "shopify" ], "countries": [ "DE" ], "companySizes": [ "50" ], "subset": 100 } }' # 2. Poll every few seconds until status is completed, failed or stopped curl 'https://api.datablist.com/v1/sources/tasks/TASK_ID' \ --header 'X-API-Key: YOUR_PERSONAL_API_KEY' # 3. Read the results, then follow nextCursor until it is null curl 'https://api.datablist.com/v1/sources/tasks/TASK_ID/results?limit=50' \ --header 'X-API-Key: YOUR_PERSONAL_API_KEY'
import time import requests BASE = "https://api.datablist.com/v1/sources" HEADERS = {"X-API-Key": "YOUR_PERSONAL_API_KEY"} # 1. Create the task response = requests.post(f"{BASE}/tasks", headers=HEADERS, json={ "sourceId": "technologies-source", "uniqueId": "technologies-source-run-1", "settings": { "technologies": [ "shopify" ], "countries": [ "DE" ], "companySizes": [ "50" ], "subset": 100 } }) response.raise_for_status() task_id = response.json()["@id"] # 2. Poll until the task finishes while True: task = requests.get(f"{BASE}/tasks/{task_id}", headers=HEADERS).json() if task["status"] in ("completed", "failed", "stopped"): break time.sleep(5) # 3. Read every result page params = {"limit": 50} while True: page = requests.get(f"{BASE}/tasks/{task_id}/results", headers=HEADERS, params=params).json() for result in page["results"]: print(result) if not page["nextCursor"]: break params["cursor"] = page["nextCursor"]
// Node.js 18+ or any runtime with fetch. Keep your key on the server. const BASE = "https://api.datablist.com/v1/sources"; const HEADERS = { "X-API-Key": "YOUR_PERSONAL_API_KEY" }; const sleep = (ms) => new Promise((r) => setTimeout(r, ms)); // 1. Create the task const created = await fetch(`${BASE}/tasks`, { method: "POST", headers: { ...HEADERS, "Content-Type": "application/json" }, body: JSON.stringify({ "sourceId": "technologies-source", "uniqueId": "technologies-source-run-1", "settings": { "technologies": [ "shopify" ], "countries": [ "DE" ], "companySizes": [ "50" ], "subset": 100 } }), }); if (!created.ok) throw new Error(`Create failed: ${created.status}`); const taskId = (await created.json())["@id"]; // 2. Poll until the task finishes let task; do { await sleep(5000); task = await (await fetch(`${BASE}/tasks/${taskId}`, { headers: HEADERS })).json(); } while (!["completed", "failed", "stopped"].includes(task.status)); // 3. Read every result page let cursor = null; do { const url = new URL(`${BASE}/tasks/${taskId}/results`); url.searchParams.set("limit", "50"); if (cursor) url.searchParams.set("cursor", cursor); const page = await (await fetch(url, { headers: HEADERS })).json(); for (const result of page.results) { console.log(result); } cursor = page.nextCursor; } while (cursor);
One flat JSON object per generated record, plus a nextCursor for the next page. Sample data.
{
"taskId": "00000000000040008000000000000001",
"results": [
{
"url": "https://northpeak-coffee.de",
"companyName": "Northpeak Coffee",
"technology": "Shopify",
"versions": "",
"lastVerified": "2026-10-20T10:00:00Z",
"trafficRank": 100000,
"rootPath": true,
"metaTitle": "Northpeak Coffee | Specialty coffee roasters",
"companyIndustry": "Food & Beverages",
"companySize": "11-50",
"companyLocations": "Hamburg, Germany",
"countries": "DE",
"languages": "de, en",
"linkedin": "https://www.linkedin.com/company/northpeak-coffee/",
"instagram": "https://www.instagram.com/northpeak.coffee/",
"emailAddresses": "hello@northpeak-coffee.de",
"phoneNumbers": "+49 40 555 0123"
}
],
"nextCursor": null
}All paths are relative to https://api.datablist.com. Field definitions come from GET /v1/sources/technologies-source (docs updated Oct 21, 2026).
/v1/sources/technologies-sourceRead the schema, no key needed/v1/sources/tasksCreate a task/v1/sources/tasks/{taskId}Poll status and progress/v1/sources/tasks/{taskId}/resultsRead results, 1 to 100 per page/v1/sources/tasks/{taskId}/stopCancel a running task/v1/sources/tasksTask history, newest firstsettings once per task. Sources need no input rows. Results can include extra fields as the source evolves, so keep unknown keys when you parse them.technologiesTechnologies |
List | Technologies to match, as catalog slugs such as "shopify", "hubspot" or "wordpress". Choose technologies or categories. |
categoriesTechnology Categories |
List | Categories to match, such as "analytics" or "shopify-apps". Ignored when you also send technologies. |
matchTechnologiesMatch |
Text | With several technologies, match any or all of them. One of: "or" (default), "and". |
keywordsKeywords |
List | Keywords to match on the website, one per element. Prefix a keyword with not to exclude it. |
countriesCountries |
List | ISO country codes such as "DE" or "US", from the website content or server location. |
languagesLanguages |
List | Language codes such as "de". Websites must offer all selected languages. matchCountryOrLanguage matches either filter instead of both. |
industriesIndustries |
List | Company industries, such as "Apparel & Fashion". |
companySizesCompany Sizes |
List | Employee ranges by their upper bound. One or more of: "1", "10", "50", "200", "500", "1000", "5000", "10000", "10001". |
subsetLimit per technology |
Number | Maximum results per technology. Keep the whole search within 10,000 results, or it fails. |
sliceRuleTraffic segment |
Text | Which traffic segment to return when there are more matches than your limit. One of: "0" to "4". |
excludeListIdExclude a list |
Text | Skip the results of a list you created before. Exclusions are recursive. |
urlWebsite |
URL | Website analyzed. |
technologyTechnology |
Text | Name of the detected technology. Also versions, lastVerified (DateTime) and rootPath (Boolean, found on the homepage). |
trafficRankTraffic Rank |
Number | Relative indicator of website traffic. Higher means more traffic. |
companyNameCompany Name |
Text | Official company name. Also inferredCompanyName, a best guess from the website content. |
metaTitleMeta Title |
Text | Homepage title. Also metaDescription, metaResponsive (Boolean) and metaCopyrightYear (Number). |
companyIndustryIndustry |
Text | Company industry. Also companyAbout, companyType and companySize. |
companyFoundedFounded |
Number | Year the company was founded. Also companyFundingTotalUsd and companyFundingRounds. |
companyLocationsLocations |
Text | Business locations. Also countries and languages served. |
companyEmployeesEmployees |
Text | Names and titles of people at the company. |
linkedinSocial Links |
Text | LinkedIn URLs found on the contact page. Also facebook, twitter and instagram. |
emailAddressesEmail Addresses |
Text | Emails found on the contact page. Also unverifiedEmailAddresses, phoneNumbers and whatsappNumbers. |
Create a Personal API Key in your Datablist account and send it on every authenticated request.
Send your key in the X-API-Key header. Datablist exchanges and renews access tokens for you.
Learn the newest workflows with detailed step-by-step guides.
Everything you or your AI coding agent need to integrate the Find Companies by Technologies API: auth, request, polling, results, limits and retries.
Chain Find Companies by Technologies with other APIs, in your code, in the Datablist app or for free.