Find Companies by Technologies API

Build lists of companies that use a given technology, from your AI assistant, no-code workflow or own code.

From $0.0034 per Company
Filter by Country, Industry and Size
10,000 Companies per Search
What you ask for
Your filters
Technology: Shopify
Country: Germany
Size: 11 to 50
What you get back
Website
Company
Industry
northpeak-coffee.de
Northpeak Coffee
Food & Beverages
junipervale.shop
Juniper & Vale
Apparel & Fashion
brightwave-outdoor.de
Brightwave Outdoor
Sporting Goods
Trusted by 38,000+ users at startups and Fortune 500 teams
Amazon Airbus Uber FedEx SAP
Datadog
Zendesk
Works with any tool that can send HTTP requests
Claude ChatGPT Cursor Make n8n Zapier Your own code
Get Started

Pick Your Way In

Let an AI assistant or your automation tool do the setup, or call the REST API from your own code.

1

Paste the setup prompt

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.

2

Paste your API key

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.

Get your API key
3

Get your results

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 result
Using Make, n8n or Zapier? Here is every field for the HTTP request

Use the HTTP request module or node your tool offers. You need three steps: start the task, wait, then read the results.

1. Start the task (HTTP request)

Method
POST
URL
https://api.datablist.com/v1/sources/tasks
Headers
X-API-Key = your API key
Content-Type = application/json
Body (JSON)
{
  "sourceId": "technologies-source",
  "uniqueId": "technologies-source-run-1",
  "settings": {
    "technologies": [
      "shopify"
    ],
    "countries": [
      "DE"
    ],
    "companySizes": [
      "50"
    ],
    "subset": 100
  }
}
Keep
The @id from the response. That is your task ID.

2. Wait until it is done

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.

3. Read the results

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.

Create a task
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);
Overview

At a Glance

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.

What you give it
  • A technology or category: For example Shopify, HubSpot or all email marketing tools
  • Filters (optional): Countries, languages, industries, company sizes and keywords
  • A limit: How many companies you want per technology
What it costs
  • 5 credits per company: Every company record returned
  • 1,000 credits = $1: Shared with the Datablist app
Use Cases

What Teams Build With It

Put Find Companies by Technologies wherever your data already flows.

Sales
Sell to users of a platform
Shopify, country, sizeFind the companiesStore owners to contact
Build a list of the stores running Shopify or WooCommerce in your market and pitch your app, integration or service.
Agencies
Win migration projects
An old CMS or toolFind the companiesProspects ready to switch
List the companies still on a platform you replace, then reach out with a migration offer.
Marketing
Size a market by tech stack
A category and countriesFind the companiesCounts by industry and size
Pull every company using a category of tools in your target countries to see how big the segment is before you invest.
Pricing

What Will It Cost You?

Pay per lookup with credits. API access starts on the Growth plan.

Calculator

How much will it cost you?

Tell us how many companies you need and we'll show you the cheapest way to get them.

= 5,000 credits
Recommended planGrowth: $50/mo
Credit top-up-
Credits you'll have20,000
Total this month $50
Same credits as the Datablist app • View pricing
How credits work
1,000 credits = $1, so each credit costs a tenth of a cent. Each company record costs 5 credits, so 1,000 companies cost 5,000 credits. One search returns at most 10,000 companies, so split larger searches with filters. The task shows credits.used with the real amount. Plan credits renew monthly and reset if unused. Top-up credits never expire.
For Developers

Build It Into Your Code

Everything you need to call the REST API directly: code, responses, endpoints, fields, authentication and limits.

Copy, Paste, Run

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);

What the API Returns

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
}

Endpoints and Fields

All paths are relative to https://api.datablist.com. Field definitions come from GET /v1/sources/technologies-source (docs updated Oct 21, 2026).

GET/v1/sources/technologies-sourceRead the schema, no key needed
POST/v1/sources/tasksCreate a task
GET/v1/sources/tasks/{taskId}Poll status and progress
GET/v1/sources/tasks/{taskId}/resultsRead results, 1 to 100 per page
POST/v1/sources/tasks/{taskId}/stopCancel a running task
GET/v1/sources/tasksTask history, newest first
Schema Reference
Send settings 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.
Show all settings and outputs
Settings
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.
Outputs
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.

One Header, Clear Limits

Create a Personal API Key in your Datablist account and send it on every authenticated request.

Authentication

Send your key in the X-API-Key header. Datablist exchanges and renews access tokens for you.

  • Header: X-API-Key: YOUR_PERSONAL_API_KEY
  • Optional: manage tokens yourself with Authorization: Bearer from POST /v1/account/token
  • One or the other: sending both headers returns 400 AmbiguousCredentials
  • Server side only: keep keys out of URLs, browser code and logs

Limits

  • Inputs: none, a source runs from its settings
  • Size: 10 MiB per request, 16 KiB per generated object
  • Run time: up to 24 hours per task
  • Requests: 120 per 60 seconds for each source operation
  • Active tasks: about 20 at once per account, shared with enrichments
  • Retention: tasks and results are kept for 90 days

Prefer No Code at All?
Run Find Companies by Technologies in the App

Create a collection, pick the source and import the results in a few clicks. 38,000+ users are already on Datablist.

See the no-code version
Guides

Related Tutorials

Learn the newest workflows with detailed step-by-step guides.

FAQ

Frequently Asked Questions

Everything you or your AI coding agent need to integrate the Find Companies by Technologies API: auth, request, polling, results, limits and retries.

Send your Personal API Key in the X-API-Key header on every request. Create the key at https://app.datablist.com/account/api; API access starts on the Growth plan. Keep it server side, for example in a DATABLIST_API_KEY environment variable or a .env file, and never put it in URLs, browser code or shared chats.
The API is asynchronous. POST /v1/sources/tasks returns 202 Accepted with the task @id. Poll GET /v1/sources/tasks/{taskId} every few seconds until the status is completed, failed or stopped, then read GET /v1/sources/tasks/{taskId}/results. Failed and stopped tasks can still have results.
A JSON object with sourceId set to "technologies-source", your own uniqueId and a settings object, here with technologies, countries, companySizes, subset. There is no inputs array: a source generates its records from the settings alone. GET /v1/sources/technologies-source returns the full schema of settings and outputs, no key needed.
Request up to 100 results per page with the limit parameter and follow nextCursor until it is null. Each result is one flat JSON object, with no inputId or per-row status. Ignore keys you do not know, since new fields can be added. The task shows credits.used for the real cost. Results are kept for 90 days.
10 MiB per request, up to 24 hours per task, 120 requests per 60 seconds for each source operation and about 20 active tasks per account, shared with the Enrichments API. One execution returns at most 10,000 objects of up to 16 KiB each.
Do not send the same POST again blindly, the task may already be running. Look up your uniqueId in GET /v1/sources/tasks first; reusing the uniqueId of an active task returns 409. POST /v1/sources/tasks/{taskId}/stop cancels a task you no longer need. Set maxCredits to stop new work after a credit threshold.
Yes. Click Set up with AI and paste the prompt into Claude, ChatGPT or Cursor. The prompt names this API and links to the Datablist setup skill on GitHub. The assistant follows the skill, creates a Datablist folder and a .env file, asks you to paste your API key into it, then asks for the settings of your run. In Make, n8n or Zapier you add an HTTP request step with the fields listed on this page.
More than 2,500 technologies and 106 categories, from Shopify and WooCommerce to HubSpot, Klaviyo or Google Analytics. GET /v1/sources/technologies-source lists every allowed slug. Send either technologies or categories; when you send both, only technologies is used.
One complete search returns at most 10,000 companies, and a larger search fails instead of returning the first 10,000. Narrow it with countries, industries, company sizes or keywords, and keep subset small. subset counts per technology, so several technologies can return more in total.
5 credits per company record returned, so 1,000 companies cost 5,000 credits, or $5. Credits are checked before the search runs. Read credits.used on the task for the real amount.
Keep Building

Related APIs, Enrichments and Free Tools

Chain Find Companies by Technologies with other APIs, in your code, in the Datablist app or for free.