Company Search by Industry, Size and Country
Pricing
from $0.90 / 1,000 company delivereds
Company Search by Industry, Size and Country
Company search by industry, size and country: set filters, get one company row per domain with name, website, industry, headcount, HQ, founding year and funding stage. Free plan: 100 per run. Pay per company delivered, empty searches free. Not a name lookup. No login or cookies.
Pricing
from $0.90 / 1,000 company delivereds
Rating
0.0
(0)
Developer
Open Enrich
Maintained by CommunityActor stats
0
Bookmarked
3
Total users
2
Monthly active users
8 days ago
Last modified
Categories
Features
Share
Company search by industry, size and country: set the filters you care about, get one row per matching company with name, domain, website, industry, headcount, HQ, founding year and funding stage. One row per domain, no repeats. No login, no cookies, no start fee. You pay only for a company row you receive.
No login | Industry, headcount band, country and founding year | One company per domain | Rows without a domain are never delivered or charged | Empty searches = free | JSON/CSV export
Filters in, companies out. This actor finds companies by what they are, not by what they are called. It does not look up one company by name: for a domain you already hold, use a lookup actor. Chain it with people-at-company to get the people behind each domain it returns.
💳 Pricing and plans
One event, company-card, charged once per company row delivered. Prices per 1,000 companies (set on the Pricing tab):
| Event | When it is charged | Free plan | Gold plan |
|---|---|---|---|
company-card | A company row is delivered to your dataset | $1.196 | $0.896 |
Bronze and Silver prices are on the Pricing tab. Higher Apify plans only lower the price. Empty searches, failed lookups, skipped rows and notices are free, and there is no start fee.
Plan-credit math. The free plan's $5 monthly credit covers about 4,170 companies at the Free price.
Success-only billing
You are charged only for a company row you receive. A search that matches nothing gets one free notice row (reason: "no_matches"). A row the data holds without a usable domain, a second record for a domain you already received, and a row with a founding year in the future are skipped: not delivered, not charged. An upstream failure is a free notice, and companies delivered before it stay delivered.
The free plan
Free Apify accounts get up to 100 companies per run, and as many runs as their Apify credit covers. Nothing is stored on our side. If your limit is higher and more companies match, the run delivers 100 and adds one free notice row (reason: "free_plan_limit"). Narrow the filters and run again, or use a paid Apify plan for no per-run limit.
Keep a run small while you test
limit (default 10, maximum 10,000) caps the whole run and what is charged. The actor asks for only as many rows as it can still deliver and charge, so a spend cap on the run is never overshot. Try one filter set with limit: 5, read the rows, then scale up.
⚡ Why this company search actor?
- Four filters that narrow fast. Country, industry, headcount band and founding year combine. Germany, software, 51-200 employees, founded 2015 or later matched 190 companies in a check on 2026-11-06.
- One row per domain. The data can hold the same company under several records. You get the domain once.
- No junk rows billed. Rows without a domain are not delivered or charged.
- Spend is bounded.
limitand the run's spend cap decide the cost before you start. - Success-only, no start fee. Empty searches and notices are free.
🎯 Use cases: build a target-account list from filters
- Target-account lists. Mid-size software companies in the DACH region founded since 2015.
- Market maps. Every company in an industry and country, for sizing or outreach planning.
- Territory building. Companies per country and headcount band for a sales region.
- Agent workflows. An AI agent needs a list of companies that fit a profile, then passes the domains on to another actor.
🚀 Quick start: companies for a set of filters
1. A first look
{ "countries": ["DE"], "industries": ["Software Development"], "sizes": ["51-200"], "limit": 5 }
2. A wider list across countries and sizes
{ "countries": ["DE", "AT", "CH"], "industries": ["Software Development", "IT Services and IT Consulting"], "sizes": ["51-200", "201-500"], "foundedFrom": 2015, "limit": 500 }
⚙️ Inputs
At least one of countries, industries, sizes, foundedFrom or foundedTo is required.
| Key | Type | Default | What it does |
|---|---|---|---|
countries | array of strings | any | Two-letter country codes, for example DE, US. Use GB for the United Kingdom. At most 10. |
industries | array of strings | any | Industry names, for example Software Development. An unknown name stops the run with a free notice that names it. At most 50. |
sizes | array of strings | any | Headcount bands: 1-10, 11-50, 51-200, 201-500, 501-1000, 1001-5000, 5001-10000, 10001+. Chosen bands must touch. Companies with no headcount on file are not returned when you set a size. |
foundedFrom | integer | none | Founded in this year or later. |
foundedTo | integer | none | Founded in this year or earlier. |
limit | integer | 10 | Most companies delivered in the whole run, which also caps what is charged. Maximum 10,000. Free plan: 100 per run. |
includeAudit | boolean | false | Adds an audit object to each row. |
Common industry names: Software Development, IT Services and IT Consulting, Technology, Information and Internet, Financial Services, Hospitals and Health Care, Pharmaceutical Manufacturing, Retail, Real Estate, Construction, Education, Advertising Services, Business Consulting and Services, Telecommunications, Food and Beverage Services.
Any other field stops the run before a lookup with remove unsupported fields: .... Nothing is charged.
📤 Output
One result row per company, in the order the data returns them. Empty values are left out.
| Key | Type | Meaning, and when it is missing |
|---|---|---|
domain | string | The company's site domain, lower-case. Always present |
name | string | Company name |
website | string | Website address as on file |
linkedinUrl | string | Public company page URL |
industry | string | Industry name |
employeeCount | integer | Headcount on file. Missing when none is on file |
hqCity | string | Headquarters place as on file, often written "City, Region" |
hqCountry | string | Two-letter country code |
foundedYear | integer | Year founded. Missing when not on file |
description | string | Short company description, cut at about 500 characters |
hasFunding | boolean | Whether a funding round is on file |
lastFundingRound | string | Type of the last round, for example seed. Missing without funding |
lastFundingDate | string | Date of the last round |
domainOwner | boolean | false when the domain belongs to a parent or another entity rather than to this company |
audit | object | Only with includeAudit: requestId, latencyMs, matched |
Example output (the shape is real, the values are illustrative):
{"domain": "example-software.de","name": "Example Software GmbH","website": "https://www.example-software.de/","linkedinUrl": "https://www.linkedin.com/company/example-software","industry": "Software Development","employeeCount": 87,"hqCity": "Munich, Bavaria","hqCountry": "DE","foundedYear": 2018,"description": "Example Software builds planning tools for logistics teams.","hasFunding": true,"lastFundingRound": "seed","lastFundingDate": "2022-04-29","domainOwner": true}
How to read the rows
- Order. Rows come in the order the data returns them: by country, then by headcount from the smallest up. With a
limityou receive the first rows in that order. Without a size filter, the first rows are companies with no headcount on file, so setsizeswhen you use alimit. - Headcount is on file, not live.
employeeCountis the number the data holds for the company. A size filter keeps only companies that have one. - A shared domain. Some rows are a division or a regional page whose domain belongs to a parent company. They are marked
domainOwner: false; in one 100-row check, 7 were. Filter on it if you need companies that own their domain. - One row per domain. If the data holds one company under two records, you get one row.
- Funding. You get the type and date of the last round. The amount is not delivered.
- Match counts. With
includeAudit,matchedis how many companies match the filters in total, before anylimit.
Other records in the run
MISSES(key-value store): holds{input: "filters", reason: "no_matches"}when nothing matched, otherwise an empty list.errors-company-search(key-value store): technical failures, so you can run the search again. A note(partial: ...)means some companies were already delivered.RUN_SUMMARY: how many companies match, how many were delivered, pages read, and how many rows were skipped for each reason.- Notice rows (
type: "notice") appear for a search with no match (no_matches), an upstream failure (upstream_error), a free-plan cut (free_plan_limit), a reached spend limit (charge_limit_reached) or invalid input (invalid-input). Notices are never charged.
What is NOT returned
- Companies looked up by name. Search is by filters only
- Contact details, people or employee lists (use people-at-company)
- Funding amounts, revenue or technology used
- Companies with no domain on file
🛡️ Reliable results
Our data promise. We work to keep the data current, and we stand behind it. If a company is missing, a row looks wrong or a company has moved on, open the Issues tab with your run link. We review every report and sort it out with you, case by case.
- No match is free and visible. A search with no result is a free notice and a
MISSESrecord. - Repeats are charged once. One row per domain per run.
- Each row is saved as it is delivered. A run that stops, or a page that fails halfway, keeps what it already produced.
- Bounded pace. Pages run at about one a second. The run timeout is one hour.
- Typos fail early. An unsupported field, a bad country code, a size band that does not touch the others or a limit above its maximum stops the run before any charge.
🤖 For AI agents (MCP)
This actor runs through the Apify MCP server. Prompt to copy:
"Use b2bdata/company-search with countries=["DE"], industries=["Software Development"], sizes=["51-200"] and limit=20. Return name, domain, employeeCount and hqCity."
When to use it. You need a list of companies that fit a profile.
When not to. You hold a company name or domain and want that one company (use a lookup actor), or you need the people at a company (use b2bdata/people-at-company).
Input contract. At least one of countries, industries, sizes, foundedFrom, foundedTo; optional limit 1-10,000 (default 10).
Output contract. One row per company with domain, name, industry, employeeCount, hqCountry. Output is deterministic and schema-stable. A search with no match is a free notice row.
Smoke test. limit: 1 with one country and one industry returns one row.
Error cases. remove unsupported fields, an unknown industry, a bad country code or size, or a bad number ends the run SUCCEEDED with one free invalid-input notice row and nothing charged.
🔌 Integrations: send results anywhere
- API. Fetch rows from the run's default dataset:
GET /v2/datasets/{datasetId}/items?format=csv. - Webhook on run success to push rows to your own endpoint.
- n8n, Make, Zapier. Use the native Apify nodes: run the actor, then read the dataset.
- Google Sheets, Airtable, HubSpot, Salesforce, Clay. Join on
domainand mapname,industryandemployeeCountto account fields.
🕐 Schedule examples
- Monthly market refresh. A schedule with a saved task that holds your filters.
- New-company watch. A weekly run with
foundedFromset to last year.
🔗 Related actors
b2bdata/people-at-company: the people at each company domain this actor returns. Openb2bdata/linkedin-company-search: company pages found by name, keyword or URL. Openb2bdata/company-lookalikes: companies similar to seed domains. Openb2bdata/headcount-by-department: how many people a company has per team. Open
❓ FAQ
Data and coverage
How do I find companies by industry, size and country?
Put country codes in countries, industry names in industries and a headcount band in sizes, then run. You get one row per company with its domain, website, headcount and HQ.
Can I search by company name? No. The data is searched by filters only, so a typo can never return the wrong company. To look up one company, use a lookup actor.
Why did I get fewer companies than I expected?
Rows stop at limit (default 10, free plan 100). Raise it. A size filter also drops companies with no headcount on file. includeAudit shows matched, the total that match.
Why are the first rows so small?
Rows come smallest headcount first. Without a size filter they start with companies that have no headcount on file. Set sizes.
Why is domainOwner false on a row?
The domain belongs to a parent company or another entity, for example a regional page of a larger group. Filter on domainOwner if you need companies that own their domain.
Do I need a LinkedIn account or cookies? No. It is a search without login, cookies or an account to ban.
Pricing
What do I pay when nothing matches? Nothing. There is no start fee, and empty searches, skipped rows and notices are free.
🛟 Support
Use the Issues tab on this actor's Apify page for bugs, questions and feature requests. We answer within 48 hours on working days. Please include the run ID and the input you used. Published on Apify by b2bdata. Not affiliated with, endorsed by, or sponsored by any company or person named in the examples above.