# TechBehemoths IT Company Directory Scraper (`jungle_synthesizer/techbehemoths-it-company-directory-scraper`) Actor

Extract IT company profiles from TechBehemoths' global directory: firmographics (founding year, team size, hourly rate band), contact details (phone, website), and revenue signals (projects per year, average project price) across 38 countries with deep nearshore and offshore coverage.

- **URL**: https://apify.com/jungle\_synthesizer/techbehemoths-it-company-directory-scraper.md
- **Developed by:** [BowTiedRaccoon](https://apify.com/jungle_synthesizer) (community)
- **Categories:** Lead generation
- **Stats:** 2 total users, 1 monthly users, 21.4% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $2.40 / 1,000 record scrapeds

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.
Actors are written with capital "A".

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.
The best way to integrate Actors is as follows.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).

# README

## IT Company Directory Scraper — TechBehemoths

Scrape the [TechBehemoths](https://techbehemoths.com) IT company directory — 43,000+ software
development, design, marketing and business-services firms across 38 countries, with deep
coverage of Eastern European, South Asian and LATAM outsourcing suppliers most agency
directories don't reach. Returns firmographics, a direct phone number, and revenue signals
(projects delivered per year, average project price) pulled from each company's profile.

***

### TechBehemoths Company Database Features

- Covers all 38 countries TechBehemoths lists — Ukraine, Poland, Romania, Belarus, Bangladesh,
  Pakistan, Colombia, and more alongside the US, UK, Germany, and Canada. Pick one or more
  countries, or leave the field empty to crawl every company on the platform.
- Pulls firmographics that never appear on the listing card: founding year, team size band,
  hourly rate band (with parsed min/max USD), and a direct phone number.
- Extracts revenue signals from each company's FAQ block where published — average project
  price and projects delivered per year, which together sketch a private services firm's
  approximate annual revenue.
- Resolves branch vs. headquarters: `head_office_country` tells you when a listed office is a
  local branch rather than the company's home base.
- Returns the full service and industry-focus breakdown per company, plus awards, a platform
  percentile rank, and TechBehemoths' own profile-strength rating.
- De-UTMs every outbound website link so you get the company's clean canonical domain.

***

### Who Uses TechBehemoths Company Data?

- **Procurement and vendor-sourcing teams** — shortlist a nearshore or offshore development
  partner by country, team size, and hourly rate band before the first call.
- **M\&A and PE associates** — projects-per-year × average project price is a rough revenue
  estimate on a private IT-services firm, useful for sourcing roll-up targets in a fragmented
  market.
- **Sales and BD teams** — build a prospect list of IT companies segmented by country, service
  line, and team size, with a direct phone number on every qualifying record.
- **Market researchers** — measure service and industry concentration across a live global
  directory of IT vendors.

***

### How TechBehemoths IT Company Directory Scraper Works

1. Pick one or more countries (or leave the field empty to cover all 38).
2. The scraper walks each country's full company listing, page by page, until it runs out of
   pages or hits your `maxItems` cap.
3. Every company discovered on a listing page is fetched again at its own profile page — the
   listing card only carries a handful of fields; firmographics, contact details, and revenue
   signals live on the profile.
4. Results land in your dataset as structured JSON — ready to export or pipe into whatever
   comes next.

***

### Input

```json
{
  "countries": ["germany", "poland", "ukraine"],
  "maxItems": 100
}
```

| Field       | Type    | Default          | Description |
|-------------|---------|------------------|-------------|
| `countries` | array   | *(all countries)* | TechBehemoths country facets to crawl (e.g. `germany`, `poland`, `ukraine`). Leave empty to crawl all 38 countries — the full corpus. |
| `maxItems`  | integer | 10               | Maximum number of company records to return. |

To crawl a single country:

```json
{
  "countries": ["poland"],
  "maxItems": 500
}
```

#### Resuming a large crawl

Every run emits a `resumeCursor` in its Output. If a large crawl stops before it finishes —
because it hit `maxItems`, your spend cap (`maxTotalChargeUsd`), or was aborted — start a new
run with **the same input** plus that `resumeCursor` to continue from where it left off. The
crawl resumes from the queued work the previous run didn't reach.

- You are **not re-charged** for records the earlier run already delivered.
- Resume within your account's run-retention window — on the free tier, roughly your 10 most
  recent runs. Once the source run is pruned, its `resumeCursor` is no longer valid.
- `resumeCursor` is opaque — supply it unmodified.

***

### TechBehemoths Company Database Output Fields

```json
{
  "company_name": "Mobiteam GmbH",
  "profile_url": "https://techbehemoths.com/company/mobiteam-gmbh",
  "website": "https://mobiteam.de/en/",
  "tagline": "Custom Web Design and Development",
  "description": "Mobiteam does custom Web Design and Development...",
  "is_verified": true,
  "founding_year": 2014,
  "team_size_band": "10-49",
  "hourly_rate_band": "$70-150/h",
  "hourly_rate_min_usd": 70,
  "hourly_rate_max_usd": 150,
  "avg_project_price_usd": 4000,
  "projects_per_year": 33,
  "founder_name": "Marcel Sobieski",
  "phone": "+4917636302768",
  "city": "Berlin",
  "country": "Germany",
  "head_office_country": "Germany",
  "offices": ["Berlin", "London", "Chișinău"],
  "services": ["Web Design", "Web Development", "E-Commerce Development"],
  "industries": ["Business services", "eCommerce", "Non-profit"],
  "awards": [{ "title": "Company of the Month", "country": "Germany", "period": "August 2022" }],
  "awards_count": 6,
  "award_years": [2025, 2024, 2023],
  "profile_strength": "Excellent",
  "platform_percentile": "top -15%",
  "listing_facet": "germany",
  "listing_facet_type": "country",
  "listing_page": 1,
  "listing_position": 1,
  "source": "techbehemoths.com",
  "scraped_at": "2026-08-22T00:00:00.000Z"
}
```

| Field | Type | Description |
|-------|------|--------------|
| `company_name` | string | Company name. |
| `profile_url` | string | Canonical TechBehemoths company profile URL. |
| `website` | string | Company's own website, with tracking parameters stripped. |
| `tagline` | string | Short listing-card summary. |
| `description` | string | Full company description from the profile page. |
| `is_verified` | boolean | TechBehemoths' "Verified Company" badge. |
| `founding_year` | integer | Year the company was founded, where published. |
| `team_size_band` | string | Reported team-size range (e.g. `10-49`). |
| `hourly_rate_band` | string | Reported hourly-rate range (e.g. `$70-150/h`). |
| `hourly_rate_min_usd` / `hourly_rate_max_usd` | integer | Parsed numeric bounds of the rate band. |
| `avg_project_price_usd` | integer | Average starting project price, where published in the company's FAQ. |
| `projects_per_year` | integer | Average projects delivered per year, where published. |
| `founder_name` | string | Founder's name, where published. |
| `phone` | string | Direct contact phone number, where published. |
| `city` / `country` | string | Company's own listed location. |
| `head_office_country` | string | Head-office country when it differs from the listed location (branch office). |
| `offices` | array | Every office city named on the profile. |
| `services` | array | Full service-line breakdown. |
| `industries` | array | Industries the company serves. |
| `awards` | array | Structured awards: `{ title, country, period }`, where the site publishes the detail. |
| `awards_count` | integer | Total awards on the profile (includes badges without full detail). |
| `award_years` | array | Years the company won a "top company" ranking ribbon. |
| `profile_strength` | string | TechBehemoths' own profile-completeness rating. |
| `platform_percentile` | string | TechBehemoths' own platform-wide ranking percentile, where published. |
| `listing_facet` | string | Country slug the company was discovered under. |
| `listing_facet_type` | string | Always `country` — see Input above. |
| `listing_page` / `listing_position` | integer | Page and position on that country's listing where the company was found. |
| `source` / `scraped_at` | string | Source site and scrape timestamp. |

A field reading `null` means TechBehemoths doesn't publish that detail for the given company —
`founder_name`, `avg_project_price_usd`, and `projects_per_year` in particular are populated at
each company's own discretion, not on every profile.

***

### FAQ

#### How do I scrape TechBehemoths company data?

TechBehemoths IT Company Directory Scraper needs no account and no API key. Give it one or more
countries — or leave the field empty — and it returns every company in those countries with full
firmographic detail from each profile page.

#### What data can I get from TechBehemoths?

Founding year, team size, hourly rate (parsed to min/max USD), a direct phone number, founder
name, average project price, projects per year, full service and industry breakdowns, awards,
and TechBehemoths' own profile-strength and platform-percentile ratings — most of which only
live on the profile page, not the listing card.

#### Can I filter by country?

Yes. Pass one or more country slugs (`germany`, `poland`, `ukraine`, and 35 others) in
`countries`. Leave it empty to crawl all 38 countries in one run.

#### How much does TechBehemoths IT Company Directory Scraper cost to run?

Pricing follows Apify's pay-per-event model — you're charged per company record saved. Check
the Pricing tab on this actor's page for the current per-record rate.

#### Why are some fields empty on certain companies?

`founder_name`, `avg_project_price_usd`, `projects_per_year`, and `awards` detail are published
by each company at its own discretion on TechBehemoths — a `null` or empty value means the
company hasn't published that detail, not a scraping error.

***

### Need More Features?

Need custom fields, filters, or a different target site? [File an issue](https://console.apify.com/actors/issues) or get in touch.

### Why Use TechBehemoths IT Company Directory Scraper?

- **Coverage no Western-first directory has** — TechBehemoths is the deepest listing for
  nearshore and offshore IT suppliers across Eastern Europe, South Asia, and LATAM.
- **A phone number on the record** — most agency directories route contact through a form; this
  one publishes a direct number where the company has listed one.
- **Revenue signals, not just tags** — average project price and projects per year together
  sketch a rough annual-revenue estimate no rendered listing shows.
- **Branch-vs-HQ resolution** — `head_office_country` tells you when a local office is a real
  local presence or a branch of a company headquartered elsewhere.

# Actor input Schema

## `sp_intended_usage` (type: `string`):

What will this data feed? E.g. lead lists, KYB checks, price tracking.

## `sp_improvement_suggestions` (type: `string`):

Provide any feedback or suggestions for improvements.

## `sp_contact` (type: `string`):

We'll personally help with your use case. No spam.

## `resumeCursor` (type: `string`):

Leave empty for a fresh crawl. To CONTINUE a previous run where it stopped — without paying again for records you already received — paste the `resumeCursor` value from that run's Output (the run's OUTPUT key). Resume promptly: the previous run's data expires with your account's retention window (free tier: your ~10 most recent runs).

## `maxItems` (type: `integer`):

Maximum number of records to scrape

## `countries` (type: `array`):

TechBehemoths country facets to crawl (e.g. germany, poland, ukraine). Every country listing page is that country's FULL company directory, so this is the covering set for the whole 43,000+ company corpus — city and service facets are strict subsets already reachable through their listing country. Leave empty to crawl all 38 countries (the full corpus).

## Actor input object example

```json
{
  "sp_intended_usage": "Describe your intended use...",
  "sp_improvement_suggestions": "Share your suggestions here...",
  "sp_contact": "Share your email here...",
  "maxItems": 10,
  "countries": []
}
```

# Actor output Schema

## `results` (type: `string`):

No description

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "sp_intended_usage": "Describe your intended use...",
    "sp_improvement_suggestions": "Share your suggestions here...",
    "sp_contact": "Share your email here...",
    "maxItems": 10,
    "countries": []
};

// Run the Actor and wait for it to finish
const run = await client.actor("jungle_synthesizer/techbehemoths-it-company-directory-scraper").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {
    "sp_intended_usage": "Describe your intended use...",
    "sp_improvement_suggestions": "Share your suggestions here...",
    "sp_contact": "Share your email here...",
    "maxItems": 10,
    "countries": [],
}

# Run the Actor and wait for it to finish
run = client.actor("jungle_synthesizer/techbehemoths-it-company-directory-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "sp_intended_usage": "Describe your intended use...",
  "sp_improvement_suggestions": "Share your suggestions here...",
  "sp_contact": "Share your email here...",
  "maxItems": 10,
  "countries": []
}' |
apify call jungle_synthesizer/techbehemoths-it-company-directory-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,jungle_synthesizer/techbehemoths-it-company-directory-scraper"
        }
    }
}

```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/lzQQNbLGFGDE6muuw/builds/xhgB9gKlc7C5cbsY1/openapi.json
