GoodFirms Scraper — B2B Agencies, Ratings & Reviews avatar

GoodFirms Scraper — B2B Agencies, Ratings & Reviews

Pricing

from $2.50 / 1,000 companies

Go to Apify Store
GoodFirms Scraper — B2B Agencies, Ratings & Reviews

GoodFirms Scraper — B2B Agencies, Ratings & Reviews

Scrape GoodFirms B2B company directories into JSON for lead lists: ratings, review counts, hourly rates, team size, every office, website, emails, phones, services, and reviews. Paste a directory or company URL, or pick a category shortcut. One dataset row per company saved.

Pricing

from $2.50 / 1,000 companies

Rating

0.0

(0)

Developer

Muhamed Didovic

Muhamed Didovic

Maintained by Community

Actor stats

0

Bookmarked

3

Total users

2

Monthly active users

3 hours ago

Last modified

Share

GoodFirms Scraper — B2B agencies, ratings, and reviews

Pull a GoodFirms directory into a dataset you can filter: company name, rating, review count, hourly rate, team size, website, email, phone, every office, services, and the reviews on the profile.

Paste a directory URL, a /company/{slug} profile, or leave the URL list empty and pick a category. Each saved row is one company.

How the GoodFirms Scraper works

Why use this scraper?

  • Directory cards and full profiles in one run: rating, rate, employees, website, email, phone, offices, services, social links, and reviews.
  • Real GoodFirms paths. Category shortcuts were checked against the live sitemap, including web development at /companies/web-development-agency rather than a guessed URL that 404s.
  • Any directory URL works, not only the eight shortcuts: country, city, language, and framework listings included.
  • One dataset row per company. Reviews stay on that row, so you are not billed twice for the same firm.
  • Direct request first, proxy only if that request fails.

Overview

GoodFirms (goodfirms.co, published by Alphazero Technologies Inc.) is a B2B ratings directory of IT service firms, software companies, and agencies. This actor turns public directory pages and company profiles into JSON for lead lists, vendor shortlists, and rate benchmarking.

A row is one company. Turning profiles off keeps the directory card only (name, rating, hourly rate, one office, one featured review) and skips the extra page fetch.

Supported inputs

Directory URLs — paginated with ?page=2, ?page=3, and so on:

  • https://www.goodfirms.co/directory/languages/top-software-development-companies
  • https://www.goodfirms.co/directory/country/top-software-development-companies/us
  • https://www.goodfirms.co/companies/web-development-agency
  • https://www.goodfirms.co/directory/platforms/top-web-design-companies
  • https://www.goodfirms.co/seo-agencies
  • https://www.goodfirms.co/artificial-intelligence

Company profiles — scraped directly, no directory crawl:

  • https://www.goodfirms.co/company/instinctools

Category shortcut — used only when Start URLs is empty: software-development, web-development, web-design, digital-marketing, mobile-app-development, seo, artificial-intelligence, devops.

Not supported: GoodFirms login, GoodFirms Pro, or any page that is not a public directory or /company/{slug} profile. A run that finds no companies fails instead of inventing rows.

Use cases

WhoWhat they get
Outbound teamsAgency lists with website, email, phone, and team size
ProcurementShortlists with rating, review count, hourly rate, and services
ResearchMulti-office footprints and category rankings
AgenciesCompetitor rate and headcount bands by country
RevOpsA flat company table to join onto a CRM

How it works

  1. You pass directory URLs, company URLs, or a category shortcut.
  2. Directory pages are fetched and paginated until maxPages, maxItems, or a page with no new companies.
  3. Each card is read from the page's public JSON-LD.
  4. With profiles on, each /company/{slug} page adds website, emails, phones, employee band, founding year, every office, services, social links, and reviews.
  5. One company row is written to the dataset.

Input configuration

FieldDefaultWhat it does
startUrlssoftware-development directoryDirectory or company URLs. When any URL is set, category and country are ignored.
categorysoftware-developmentShortcut used only when Start URLs is empty.
countryemptyLocation slug for categories that have one. software-development uses us, gb, de. web-development, artificial-intelligence, and devops append the slug GoodFirms uses on that path. Other shortcuts ignore it.
maxItems100Stop after this many companies. Free plans are capped at 100.
maxPages5Directory pages per start URL.
includeProfileDetailstrueOpen each profile. Off = directory card only.
maxReviewsPerCompany5Reviews kept on the row. Rating and review count still reflect the full GoodFirms total.
maxConcurrency8Profiles fetched at once.
proxyConfigurationApify Proxy onUsed only after a direct request fails.

US software companies, 50 rows:

{
"startUrls": [
"https://www.goodfirms.co/directory/country/top-software-development-companies/us"
],
"maxItems": 50,
"maxPages": 2,
"includeProfileDetails": true
}

One profile:

{
"startUrls": ["https://www.goodfirms.co/company/instinctools"],
"includeProfileDetails": true
}

Category shortcut, no URL list — clear Start URLs in the form, or pass an empty array:

{
"startUrls": [],
"category": "web-development",
"country": "gb",
"maxItems": 25
}

Output overview

Each item is one company. Contact fields, offices, services, and reviews come from the profile page. Rank (position) and the directory URL come from the listing that found the company. A direct profile URL leaves position and directoryUrl empty.

Output samples

Directory run, profiles on, maxReviewsPerCompany 2. Values from a live profile fetched on 2026-09-25. Review text is shortened here; the dataset keeps the full text up to the review cap.

{
"companyId": "instinctools",
"name": "Instinctools",
"profileUrl": "https://www.goodfirms.co/company/instinctools",
"website": "https://www.instinctools.com/",
"domain": "instinctools.com",
"rating": 4.9,
"reviewCount": 27,
"hourlyRate": "$25 - $49",
"employees": "250 - 999",
"foundedYear": 2000,
"phone": "+12028214280",
"email": "contact@instinctools.com",
"city": "Potomac",
"region": "Maryland",
"country": "us",
"offices": [
{ "city": "Potomac", "region": "Maryland", "country": "us" },
{ "city": "Stuttgart", "country": "de" },
{ "city": "Warsaw", "country": "pl" },
{ "city": "Mississauga", "country": "ca" }
],
"services": ["Software Development", "Web Development", "Artificial Intelligence"],
"socialLinks": ["https://www.linkedin.com/company/instinctools"],
"reviews": [
{
"author": "Sally Maddah",
"rating": 5,
"publishedAt": "2026-06-03T13:18:35Z",
"title": "Instinctools was a highly collaborative partner that successfully delivered a scalable health platform while adapting seamlessly to evolving project needs."
}
],
"position": 1,
"directoryUrl": "https://www.goodfirms.co/directory/languages/top-software-development-companies",
"source": "goodfirms"
}

Key output fields

Identity — companyId, name, profileUrl, logoUrl, description, position, directoryUrl

Commercial — rating, reviewCount, hourlyRate, employees, foundedYear, services

Contact — website, domain, email, emails, phone, phones, socialLinks

Location — streetAddress, city, region, postalCode, country, plus offices for every address on the profile

Reviews — reviews (author, rating, publishedAt, title, text), capped by maxReviewsPerCompany

FAQ

Does a URL list override the category? Yes. If startUrls has any URL, category and country are ignored.

Why did country do nothing? web-design, digital-marketing, mobile-app-development, and seo have no single country pattern on GoodFirms. Paste the location URL in Start URLs. For artificial-intelligence and devops, use the slug from the live path (usa, uk, india), not only a two-letter code.

Are empty emails a bug? No. The email is whatever the public profile lists. Some companies publish a phone and website and no email.

Does this scrape every review ever written? It keeps up to maxReviewsPerCompany reviews from the profile JSON-LD. reviewCount is still the full total GoodFirms publishes.

What is not included? No login-only fields, no GoodFirms Pro analytics, and no separate software-product catalog unless that page is itself a company directory with company cards.

Support

Open an issue on this actor's Issues tab for a bug or a missing field. For a custom field list or a scheduled export, email muhamed.didovic@gmail.com.

Additional services

Need a private actor, extra fields, or a feed into your warehouse? Custom builds are available at muhamed.didovic@gmail.com.

Explore more scrapers

Full list at apify.com/memo23.

🤖 For AI Agents & LLM Apps

Compact reference for AI agents calling this actor via the Apify MCP server or the Apify API (actor: memo23/goodfirms-scraper).

Purpose: one dataset row per GoodFirms company, with profile contacts and reviews, from a directory URL or a /company/{slug} URL.

Minimal input:

{
"startUrls": ["https://www.goodfirms.co/directory/languages/top-software-development-companies"],
"maxItems": 20,
"maxPages": 1,
"includeProfileDetails": true
}

Output: one row per company — companyId, name, profileUrl, website, domain, logoUrl, description, rating, reviewCount, hourlyRate, employees, foundedYear, phone, phones, email, emails, streetAddress, city, region, postalCode, country, offices {streetAddress, city, region, postalCode, country}, services, socialLinks, reviews {author, rating, publishedAt, title, text}, position, directoryUrl, source, scrapedAt.

Behaviors an agent should know:

  • Always set maxItems. An empty cap still defaults to 100, and a large directory has hundreds of pages.
  • Non-empty startUrls overrides category and country.
  • includeProfileDetails: false skips website, email, employee band, extra offices, services, and full reviews.
  • Billing is one apify-default-dataset-item per company saved, plus apify-actor-start per GB of memory. Reviews are not a separate charge.
  • A run with zero companies fails. Do not retry the same bad URL in a loop.

⚠️ Disclaimer

This Actor is an independent tool and is not affiliated with, endorsed by, or sponsored by Alphazero Technologies Inc. (GoodFirms) or any of its subsidiaries. All trademarks mentioned are the property of their respective owners.

The scraper accesses only publicly available GoodFirms directory and company profile pages — no authenticated endpoints, paid features, or content behind the goodfirms.co login wall. Users are responsible for ensuring their use complies with goodfirms.co's Terms of Service, applicable data-protection law (GDPR, CCPA, etc.), and any contractual obligations of their own organization.

SEO Keywords

GoodFirms scraper, GoodFirms API, GoodFirms companies, GoodFirms agency directory, B2B agency lead list, IT services companies scraper, software development companies list, web development agencies, digital marketing agencies data, GoodFirms ratings export, GoodFirms hourly rates, GoodFirms reviews export, agency email list, vendor shortlist data, GoodFirms country directory