GoodFirms Agencies & B2B Company Leads Scraper
Pricing
from $17.00 / 1,000 results
GoodFirms Agencies & B2B Company Leads Scraper
Scrape B2B agency and company leads from GoodFirms directories: company name, services focus, city and country, hourly rate, team size, founded year, rating, review count, website and profile URL. Filter by service category and location. Export to JSON, CSV or Excel.
Pricing
from $17.00 / 1,000 results
Rating
0.0
(0)
Developer
Scrapers Lat
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
7 days ago
Last modified
Categories
Share
GoodFirms Agencies & B2B Company Leads Scraper
Here is one real result, with every field the actor returns:
{"companyName": "Utility","serviceCategory": "Mobile App Development","location": "NYC, United States","city": "NYC","country": "United States","hourlyRate": "$150 - $199/hr","teamSize": "50 - 249","foundedYear": 2013,"rating": 5,"reviewCount": 18,"website": "https://utility.agency","logoUrl": "https://assets.goodfirms.co/services/medium/utility.png?v=1786450569","description": "Utility is a trusted mobile app development company in the USA delivering high-quality custom iOS and Android applications. With years of industry experience, the team follows research-driven strategies and strong technical expertise to ensure efficient project execution.","highlights": "Award-winning digital products built with strategy | End-to-end mobile app and AI development team | From startup ideas to enterprise-ready products","topReview": "Connecting employers with top talent and job seekers with verified jobs in Australia.","topReviewRole": "Sen. Frontend Developer","sponsored": false,"profileUrl": "https://www.goodfirms.co/company/utility","entityId": "10139","searchQuery": "Mobile App Development","searchLocation": null,"aiProfileSummary": "Utility is a leading mobile app development company based in the USA, specializing in custom iOS and Android applications. With a focus on research-driven strategies and technical expertise, they cater to both startups and enterprises, delivering award-winning digital products.","aiLeadScore": 85,"aiLeadTier": "hot","aiCategory": "Mobile App Development","aiTags": ["iOS Development", "Android Development", "Custom Applications", "Digital Products", "AI Development", "End-to-End Services", "Startup Solutions", "Enterprise Applications"],"source": "GoodFirms","observedAt": "2026-08-14T07:57:33.324Z","error": null}
The most complete GoodFirms agencies scraper available. It returns every firmographic field the B2B directory exposes for an agency, including hourly rate, team size, founded year, rating, review count, website and top review, plus optional AI add-ons that summarize, score and categorize each lead and an email enrichment add-on, and gives you service-category and country filters to target exactly the agencies you need.
📥 Input · 📤 Output · 💰 Pricing · ▶️ Examples
Table of contents
- What it does
- Quickstart
- Input reference
- Output reference
- Example output record
- Run via API and CLI
- Fetch results
- Billing and limits
- FAQ and troubleshooting
What it does
The actor searches the GoodFirms B2B directory by service category, optionally filtered by country, paginates through the ranked agency listings, and writes one normalized company lead per record to the run's dataset. Each record carries the company name, service category, location, hourly rate, team size, founded year, rating, review count, website, a top review and profile URL. An email enrichment add-on tries to find a public email for listings without one, and optional paid AI add-ons write a profile summary, score the agency as an outreach/partnership lead and categorize it.
Data covers agencies listed on GoodFirms worldwide. Fields the listing does not publish are returned as null; the actor never invents a value.
Quickstart
Open the actor, paste this into the input, and press Run. It returns 2 mobile app development agencies with the AI add-ons enabled.
{"searchQueries": ["Mobile App Development"],"maxAgencies": 2,"withAiProfileSummary": true,"withAiLeadScore": true,"withAiCategorize": true}
Pass several service categories in searchQueries, and optionally filter by country with locations.
Input reference
| Field | Type | Required | Default | Description |
|---|---|---|---|---|
searchQueries | string[] | no | ["mobile app development"] | One or more agency service categories to scrape. Use plain names like mobile app development, web development, seo. |
locations | string[] | no | ["United States"] | Optional list of countries to filter agencies by, using a country name (for example United States, United Kingdom). |
maxAgencies | integer | no | 10 | Maximum number of agencies to collect across the whole run. |
enrichContacts | boolean | no | false | Paid add-on. For each result without an email, attempt to find a public email. Off by default. |
enrichContactsMax | integer | no | 50 | Cap how many results the enrichment add-on tries, to control add-on cost. |
withAiProfileSummary | boolean | no | false | Paid add-on. Adds an AI-written agency profile per listing. Charged per agency processed. |
withAiLeadScore | boolean | no | false | Paid add-on. Scores each agency 0-100 as an outreach/partnership lead with a hot/warm/cold tier. Charged per agency processed. |
withAiCategorize | boolean | no | false | Paid add-on. Adds a normalized service category and keyword tags. Charged per agency processed. |
AI and enrichment add-ons are disabled for free (non-paying) Apify users.
Output reference
One dataset item per agency. Types: string, integer, boolean, string[], or null when the source value is absent.
| Field | Type | Description |
|---|---|---|
companyName | string | Agency name. |
serviceCategory | string | Service category the agency was found under. |
location | string | Full location string as published. |
city | string | City parsed from the location, or null. |
country | string | Country parsed from the location, or null. |
hourlyRate | string | Published hourly-rate band, for example $150 - $199/hr, or null. |
teamSize | string | Team size band, for example 50 - 249, or null. |
foundedYear | integer | Year founded, or null. |
rating | number | Average rating (0-5), or null. |
reviewCount | integer | Number of reviews. |
website | string | Agency website URL, or null. |
logoUrl | string | Logo image URL, or null. |
description | string | Agency description text, or null. |
highlights | string | Highlighted selling points, or null. |
topReview | string | Text of the top review, or null. |
topReviewRole | string | Role of the top reviewer, or null. |
sponsored | boolean | Whether the listing is a sponsored placement. |
profileUrl | string | Canonical GoodFirms profile URL. |
entityId | string | GoodFirms internal company ID. |
searchQuery | string | The service category that produced this record. |
searchLocation | string | The country filter that produced this record, or null. |
aiProfileSummary | string | AI add-on. Short agency profile (only when withAiProfileSummary). |
aiLeadScore | integer | AI add-on. 0-100 lead score (only when withAiLeadScore). |
aiLeadTier | string | AI add-on. hot, warm or cold. |
aiCategory | string | AI add-on. Normalized service category (only when withAiCategorize). |
aiTags | string[] | AI add-on. Keyword tags. |
source | string | Always GoodFirms. |
observedAt | string | ISO 8601 timestamp of when the record was collected. |
error | string | null on success. On a failed run, a single item with a populated error field is written instead. |
Example output record
Real record from a live run (input {"searchQueries": ["Mobile App Development"], "maxAgencies": 2, "withAiLeadScore": true, "withAiCategorize": true}):
{"companyName": "Utility","serviceCategory": "Mobile App Development","location": "NYC, United States","city": "NYC","country": "United States","hourlyRate": "$150 - $199/hr","teamSize": "50 - 249","foundedYear": 2013,"rating": 5,"reviewCount": 18,"website": "https://utility.agency","highlights": "Award-winning digital products built with strategy | End-to-end mobile app and AI development team","sponsored": false,"profileUrl": "https://www.goodfirms.co/company/utility","entityId": "10139","searchQuery": "Mobile App Development","aiLeadScore": 85,"aiLeadTier": "hot","aiCategory": "Mobile App Development","aiTags": ["iOS Development", "Android Development", "Custom Applications", "Enterprise Applications"],"source": "GoodFirms","observedAt": "2026-08-14T07:57:33.324Z","error": null}
Run via API and CLI
Start a run and wait for it to finish, then read the dataset. Replace <TOKEN> with your Apify API token.
Run synchronously and get dataset items in one call:
curl -X POST "https://api.apify.com/v2/acts/scrapers_lat~goodfirms-agencies-scraper/run-sync-get-dataset-items?token=<TOKEN>" \-H "Content-Type: application/json" \-d '{"searchQueries":["Web Development"],"locations":["United States"],"maxAgencies":25}'
Start a run asynchronously:
curl -X POST "https://api.apify.com/v2/acts/scrapers_lat~goodfirms-agencies-scraper/runs?token=<TOKEN>" \-H "Content-Type: application/json" \-d '{"searchQueries":["SEO"],"maxAgencies":100,"enrichContacts":true}'
Apify CLI:
apify call scrapers_lat/goodfirms-agencies-scraper \--input '{"searchQueries":["Mobile App Development"],"maxAgencies":50}'
Fetch results
Every run writes to a dataset. Fetch items as JSON, CSV, or Excel by changing format:
# JSONcurl "https://api.apify.com/v2/datasets/<DATASET_ID>/items?token=<TOKEN>&clean=true&format=json"# CSVcurl "https://api.apify.com/v2/datasets/<DATASET_ID>/items?token=<TOKEN>&clean=true&format=csv"# Paginate large datasetscurl "https://api.apify.com/v2/datasets/<DATASET_ID>/items?token=<TOKEN>&offset=1000&limit=1000"
<DATASET_ID> is returned as defaultDatasetId in the run object. Use offset and limit to page through large result sets. clean=true drops empty and internal fields.
Billing and limits
- Pay per result. You are charged per agency returned (
resultevent). See the pricing tab for the current per-result price. - Optional add-ons. Email enrichment and each AI add-on (
ai_profile_summary,ai_lead_score,ai_categorize) are billed only when they produce usable output for an agency. - No charge on failure. If a run errors, the actor writes a single item with a populated
errorfield and does not charge for it. Empty runs cost nothing. - Spend cap respected. Set
maxTotalChargeUsdon the run; once reached, the actor stops emitting and charging further billable results and add-ons. - Free Apify plans are capped at 10 agencies per run and cannot use the AI or enrichment add-ons. Upgrade for higher
maxAgenciesand add-ons.
FAQ and troubleshooting
A run returned 0 records. Why? The service category or country matched nothing. Check the category spelling. Zero-result runs are not charged.
How do I get email addresses?
Turn on enrichContacts. For agencies without a published email, the add-on tries to find a public one.
Can I search several categories at once?
Yes. Pass multiple items in searchQueries; each runs its own search up to maxAgencies.
Why are some fields null?
GoodFirms does not publish every field for every agency. Missing values are returned as null, never invented.
What do the AI add-ons add?
withAiProfileSummary adds a short profile, withAiLeadScore adds a 0-100 lead score and tier, and withAiCategorize adds a normalized category and tags. All require a paid Apify plan and are billed only when they produce output.
Is this an official GoodFirms tool? No. This actor is independent and has no affiliation with GoodFirms. It reads only data that is publicly available on the directory. Use it in accordance with the site's terms of service.
Related scrapers
- Clutch Agencies & B2B Company Leads Scraper: B2B agency profiles and contacts from Clutch.
- DesignRush Agencies Scraper: Marketing and dev agency listings from DesignRush.
- TheOrg Decision Makers & Company Contacts Scraper: Company org charts and decision-maker contacts.
- Capterra Software Reviews Scraper: Software product profiles and reviews.
- Cybo Business Leads Scraper: Global business leads with contacts.
- GitHub Contributor Contacts Scraper: Developer leads and emails per repo.
More scrapers at scrapers.lat
Built and maintained by scrapers.lat, where we publish scrapers for US and Latin American public platforms: company registries, government data, finance, e-commerce and more. Browse the catalog or request a custom scraper at scrapers.lat.
Independent tool, not affiliated with GoodFirms. Accesses only publicly available directory data. Use in accordance with the site's terms of service.
