GoodFirms B2B Companies & Software Scraper avatar

GoodFirms B2B Companies & Software Scraper

Pricing

from $2.50 / 1,000 results

Go to Apify Store
GoodFirms B2B Companies & Software Scraper

GoodFirms B2B Companies & Software Scraper

GoodFirms scraper & API: find B2B agencies & software by service category and location β€” company name, rating & reviews, hourly rate, minimum budget, team size, founded year, location, services and website. B2B vendor research and agency lead generation β€” fast, no login.

Pricing

from $2.50 / 1,000 results

Rating

0.0

(0)

Developer

Haketa

Haketa

Maintained by Community

Actor stats

0

Bookmarked

34

Total users

5

Monthly active users

an hour ago

Last modified

Security

Limited permissions

Share

GoodFirms Scraper β€” B2B Agencies, Software Products, Hourly Rates, Emails & Reviews

Turn GoodFirms' global B2B agency and SaaS directory into an enriched sales and market-intelligence pipeline. Extract verified B2B service companies and SaaS software products from GoodFirms.co β€” including company name, cleaned website URL, aggregate rating, verified review count, hourly rate bracket, employee headcount band, founded year, structured headquarters & office addresses, public business email & phone, social links (LinkedIn, X/Twitter, Facebook, Instagram), service-focus percentages, client-size split, AI tools used, and verified client reviews.

Export to JSON, CSV, Excel, or the Apify API β€” no login, no manual copy-pasting.

Apify Actor


⚑ At a glance

FeatureDetails
🎯 Target directoryGoodFirms.co β€” Top global B2B IT services, agency & SaaS review directory
🏒 Collection modesCompanies (companies) β€” 30+ B2B agency categories Γ— 20+ country/state filters; Software (software) β€” 20+ SaaS verticals; Auto (auto) β€” detects from startUrls
πŸ“ž B2B Contact & SocialUTM-stripped websiteUrl (100%), contact.phone (~99.5%), contact.email (~88%), and socialLinks (linkedin ~92%, facebook, twitter, instagram)
πŸ’Ό Firmographic signalshourlyRateRange (e.g., $25 - $49/hr), employeesRange (e.g., 50 - 249), foundedYear, rating, reviewCount, and structured headquarters + offices
πŸ“Š Service & Client Splitservices breakdown with % share (e.g., Web Development: 20%), focusBreakdown (Small / Medium / Large Business %), aiTools, and whyChoose bullets
⭐ Verified Client ReviewsOptional scrapeReviews: true extracts individual client reviews (rating, projectName, projectCost, projectDuration, reviewer, reviewerRole, reviewerCompany, summary)
πŸ” Pagination & ScaleUnlocked 1,000+ results pagination (maxPagesPerCategory: 0 auto-paginates until maxRecords is reached) with 100% slug deduplication
πŸ“¦ Bulk exportPre-built Companies, Software, and Reviews dataset views in JSON, CSV, Excel (XLSX), and REST API

πŸ”Ž Why scrape GoodFirms?

GoodFirms is one of the Big Three global B2B service and software directories (alongside Clutch and G2/DesignRush). Over 110,000+ software development companies, digital marketing agencies, UI/UX studios, AI/blockchain consultancies, and SaaS vendors maintain detailed profiles on GoodFirms because enterprise procurement teams and startup founders use it daily to shortlist vendors.

That makes GoodFirms one of the highest-intent B2B lead sources on the web β€” every agency profile combines budget & pricing tier (hourlyRateRange), headcount (employeesRange), geographic footprint (headquarters + offices), verified review velocity (rating + reviewCount), service specialization (services %), and direct contact channels (websiteUrl, contact.email, contact.phone, socialLinks.linkedin).

Collecting this manually is a bottleneck:

  • Deep multi-page directories: Categories like Web Development, Mobile App Development, and Digital Marketing span hundreds of pages.
  • Split data between cards and profiles: Listing cards show summary firmographics, while business emails, street addresses, multi-office locations, service-focus percentages, and social links live on individual /company/{slug} pages.
  • Cross-category overlap: The same agency often ranks in 5–10 categories (e.g., Web Dev, Node.js, React, E-Commerce); scraping without global slug deduplication creates noisy duplicates.

This GoodFirms scraper automates discovery, multi-page traversal, profile enrichment, UTM cleanup, and slug deduplication in a single run.

Common reasons teams use this GoodFirms data extractor

  • 🎯 Outbound B2B Lead Generation β€” Build hyper-targeted agency prospect lists filtered by hourly rate, employee count, country, and service line β€” with website, email, phone, and LinkedIn in the same row.
  • πŸ“ˆ Account-Based Marketing (ABM) & Lookalike Audiences β€” Segment mid-market IT and marketing agencies (50 - 249 or 250 - 999 employees) for partnerships, white-label services, DevOps tooling, or SaaS sales.
  • πŸ” Competitive & Pricing Intelligence β€” Benchmark hourly rates, review counts, client-size splits, and AI tool adoption (aiTools) across regions (US, UK, India, Ukraine, Poland, UAE, LATAM).
  • πŸ’» SaaS Market & Alternatives Research β€” Extract software products (mode: "software") with pricing models, starting prices, free-trial flags, feature checklists, and competitor alternatives.
  • 🀝 M&A, Roll-up & PE Deal Sourcing β€” Screen boutique and mid-sized IT service firms by founding year, headcount, hourly rate band, and verified review momentum.

✨ What this GoodFirms scraper does

  • βœ… Dual scraping modes (companies & software) β€” Scrape B2B service agencies, SaaS software products, or let mode: "auto" infer the record type from any URL in startUrls.
  • βœ… Unlocked 1,000+ results pagination β€” With maxPagesPerCategory: 0 (the default), the scraper automatically walks page 1, 2, 3 … across your selected categories and countries until your maxRecords target is reached or the directory ends.
  • βœ… Two speed/depth tiers (scrapeProfileDetails):
    • Fast List Mode (scrapeProfileDetails: false): Extracts rich listing-card data (name, websiteUrl, logoUrl, tagline, rating, reviewCount, hourlyRateRange, employeesRange, foundedYear, headquarters, aiTools, topReview, whyChoose) in seconds.
    • Full Profile Mode (scrapeProfileDetails: true): Visits each /company/{slug} page to add contact.email (~88% fill), contact.phone (~99.5% fill), socialLinks (LinkedIn ~92%), full description, services % breakdown, focusBreakdown %, and offices.
  • βœ… Server-side ICP filtering β€” Apply countrySlugs, employeesFilter, hourlyRateFilter, and minReviews directly to GoodFirms discovery URLs so you only scrape companies matching your Ideal Customer Profile.
  • βœ… Automatic slug normalization β€” If a bare category slug is passed (e.g., web-development instead of web-development-agency), the actor automatically retries the canonical -agency slug on page 1.
  • βœ… Opt-in verified client reviews (scrapeReviews: true) β€” Pulls individual client reviews with project cost, project duration, reviewer name/title/company, and review summary.

🎯 Use cases

1. Outbound SDR & Cold Email Teams (Apollo / Clay / Smartlead / Lemlist)

  • Ready-to-sequence agency lists: Scrape digital-marketing-agency, seo-agency, and ppc-agency across ["us", "gb", "ca", "au"] with employeesFilter: "10-49" and scrapeProfileDetails: true. Export directly to Clay or Smartlead with websiteUrl, contact.email, contact.phone, socialLinks.linkedin, and topReview.quote for personalized first lines.

2. B2B SaaS & Developer Tool Vendors

  • AI & DevOps tool adoption targeting: Filter agencies by the aiTools array reported on their cards (e.g., GitHub Copilot, Cursor, ChatGPT, Claude, Midjourney) and topServices to pitch developer productivity, cloud infrastructure, or QA automation platforms.

3. White-Label & Staff Augmentation Partnerships

  • High-rate agency partnering: Identify US/UK/EU agencies charging $100 - $149/hr or $150 - $199/hr (hourlyRateFilter: "100-149") and pair them with nearshore/offshore delivery teams.

4. M&A Advisors, Private Equity & Search Funds

  • IT Services acquisition screening: Filter for established firms (foundedYear <= 2018, employeesFilter: "50-249", minReviews: 15) and analyze their focusBreakdown (Enterprise vs. Mid-Market vs. SMB share) and multi-country offices.

πŸ“₯ Input parameters

Configure the actor in the Apify Console or pass JSON via the API. All fields are optional β€” launching with an empty input {} runs a curated multi-category sample of ~100 B2B agencies.

ParameterTypeDefaultPrefillDescription
modestring"auto""companies""companies" (B2B agencies), "software" (SaaS products), or "auto" (detect from startUrls).
serviceCategorySlugsarray<string>[]["web-development-agency"]One or more B2B agency categories to crawl (30 built-in options in the dropdown, or pass any GoodFirms category slug).
countrySlugsarray<string>[][]Optional country or US state filters (us, gb, ca, au, in, de, fr, nl, ua, pl, ae, california, new-york, texas, etc.). Empty = global.
softwareCategorySlugsarray<string>[][]SaaS categories to crawl when mode is "software" or "auto" (crm-software, project-management-software, erp-software, etc.).
employeesFilterstring""β€”Filter agencies by headcount bracket: "" (Any), "2-9", "10-49", "50-249", "250-999", "1000-9999", "10000+".
hourlyRateFilterstring""β€”Filter agencies by USD hourly rate: "" (Any), "<25", "25-49", "50-99", "100-149", "150-199", "200+".
minReviewsinteger0β€”Only include companies with at least this many verified reviews (0 = no minimum).
scrapeProfileDetailsbooleantruefalseVisit each profile page for contact.email, contact.phone, socialLinks, services %, focusBreakdown %, and full description. Set false for fast list-card scraping.
scrapeReviewsbooleanfalsefalseFetch verified client reviews per company/software profile.
maxRecordsinteger020Maximum total records to output (0 = unlimited). Set to 1000+ for deep category sweeps.
maxPagesPerCategoryinteger0β€”Maximum listing pages to crawl per category/country combo. 0 = unlimited (auto-governed by maxRecords).
startUrlsarray[][]Advanced: Paste any GoodFirms category URL, country listing URL, /company/{slug} URL, or /software/{slug} URL. Category URLs in startUrls paginate automatically.
companySlugsarray<string>[][]Advanced: Direct company slugs (e.g., ["unified-infotech", "hyperlink-infosystem"]).
softwareSlugsarray<string>[][]Advanced: Direct software slugs (e.g., ["hubspot-crm", "monday-com"]).
requestDelayinteger1200β€”Delay between requests in milliseconds.
maxConcurrencyinteger33Parallel worker count (1–10). Keep at 2–3 for smooth execution.
proxyConfigurationobjectApify ProxyApify ProxyProxy configuration (uses cost-effective datacenter IPs first and automatically escalates to residential if challenged).

Sample Input Recipes

Recipe 1: Fast list-mode discovery of 1,000+ Web & Mobile Agencies
{
"mode": "companies",
"serviceCategorySlugs": [
"web-development-agency",
"mobile-app-development-agency",
"software-development-agency"
],
"scrapeProfileDetails": false,
"maxRecords": 1000,
"maxPagesPerCategory": 0
}
Recipe 2: Full-detail ICP Lead Generation (US, UK & Canada Mid-Market Agencies with Emails & LinkedIn)
{
"mode": "companies",
"serviceCategorySlugs": [
"digital-marketing-agency",
"seo-agency",
"web-development-agency"
],
"countrySlugs": ["us", "gb", "ca"],
"employeesFilter": "10-49",
"hourlyRateFilter": "50-99",
"minReviews": 5,
"scrapeProfileDetails": true,
"scrapeReviews": false,
"maxRecords": 500,
"maxPagesPerCategory": 0
}
Recipe 3: SaaS Software Directory Extraction (mode: "software")
{
"mode": "software",
"softwareCategorySlugs": [
"crm-software",
"project-management-software",
"helpdesk-software"
],
"maxRecords": 300,
"maxPagesPerCategory": 0
}

πŸ“€ Output schema & field reference

Example Output β€” B2B Company Record (recordType: "company")

{
"recordType": "company",
"slug": "example-agency",
"profileUrl": "https://www.goodfirms.co/company/example-agency",
"name": "Example Agency",
"tagline": "Example Agency is a premier web and software development agency delivering scalable digital products for startups and enterprises.",
"logoUrl": "https://assets.goodfirms.co/services/medium/example-agency.png",
"websiteUrl": "https://exampleagency.com/",
"description": "With 250+ engineers and designers across New York and London, Example Agency builds custom web applications, AI workflows, and enterprise e-commerce platforms...",
"rating": 4.9,
"reviewCount": 202,
"foundedYear": 2015,
"employeesRange": "250 - 999",
"hourlyRateRange": "$25 - $49/hr",
"minProjectSize": "$10,000+",
"headquarters": {
"city": "New York",
"state": "New York",
"country": "us",
"address": "287 Park Ave S"
},
"offices": [
{ "city": "London", "country": "gb" },
{ "city": "Noida", "country": "in" }
],
"topServices": [
"Web Development",
"Software Development",
"E-commerce Development",
"Web Design"
],
"services": [
{ "name": "Web Development", "percent": 40 },
{ "name": "Software Development", "percent": 30 },
{ "name": "E-commerce Development", "percent": 20 },
{ "name": "Web Design", "percent": 10 }
],
"focusBreakdown": [
{ "name": "Small Business", "percent": 30 },
{ "name": "Medium Business", "percent": 35 },
{ "name": "Large Business", "percent": 35 }
],
"contact": {
"email": "hello@exampleagency.com",
"phone": "+1-555-123-4567"
},
"socialLinks": {
"linkedin": "https://www.linkedin.com/company/example-agency",
"twitter": "https://twitter.com/exampleagency",
"facebook": "https://www.facebook.com/exampleagency",
"instagram": null
},
"aiTools": ["GitHub Copilot", "Cursor", "ChatGPT", "Claude"],
"topReview": {
"quote": "Example Agency delivered a robust, user-friendly platform ahead of schedule.",
"author": "VP of Engineering at FinTech Corp"
},
"whyChoose": [
"Full-cycle agile product engineering",
"Dedicated cross-functional pods",
"Transparent weekly sprint reporting"
],
"reviews": [],
"discoveredFrom": "web-development-agency",
"scrapedAt": "2026-11-01T23:59:00.000Z"
}

🏒 Company Identity & Firmographics

FieldTypeCoverageDescription
recordTypestring🟒 High (100%)"company" or "software"
slugstring🟒 High (100%)Unique GoodFirms URL slug (primary deduplication key)
profileUrlstring🟒 High (100%)Canonical GoodFirms profile URL
namestring🟒 High (100%)Company or software product display name
websiteUrlstring | null🟒 High (100%)External company website URL with UTM tracking parameters stripped
logoUrlstring | null🟒 High (100%)Company or product logo image URL
taglinestring | null🟒 High (100%)Short positioning headline from the directory listing card
descriptionstring | null🟒 High (~99.7% in profile mode)Full multi-paragraph "About" summary from the profile page
ratingnumber | null🟒 High (~99.5%)Aggregate star rating (0.0–5.0)
reviewCountinteger | null🟒 High (~99%)Total number of verified client reviews
foundedYearinteger | null🟒 High (~98%)Year the company was founded
employeesRangestring | null🟒 High (100%)Team size bracket (e.g., "10 - 49", "50 - 249", "250 - 999")
hourlyRateRangestring | null🟒 High (100%)Hourly rate bracket (e.g., "< $25/hr", "$25 - $49/hr", "$50 - $99/hr")
minProjectSizestring | null🟑 ConditionalMinimum project budget when disclosed on the profile
FieldTypeCoverageDescription
headquartersobject | null🟒 High (~99%)Structured primary HQ ({ city, state, country, address })
officesarray<object>🟑 Conditional (~11%)Additional global branch offices ([{ city, country }], profile mode)
contact.phonestring | null🟒 High (~99.5% in profile mode)Public business telephone number
contact.emailstring | null🟒 High (~88% in profile mode)Public business contact email address
socialLinks.linkedinstring | null🟒 High (~92% in profile mode)Company LinkedIn page URL
socialLinks.facebook · twitter · instagramstring | null🟒 High (82% / 68% / 37%)Additional social profile links

🧩 Services, Client Focus, AI Stack & Reviews

FieldTypeCoverageDescription
topServicesarray<string>🟒 High (~99.7% in profile mode)Top-level service lines offered by the agency
servicesarray<object>🟒 High (~99.7% in profile mode)Sub-service breakdown with percentage share ([{ name, percent }])
focusBreakdownarray<object>🟒 High (~95% in profile mode)Client segment split (Small Business, Medium Business, Large Business with percent)
aiToolsarray<string>🟑 Conditional (~47%)AI coding/design/productivity tools listed on the company card
topReviewobject | null🟒 High (~99.5%)Highlighted client review quote ({ quote, author }) from the listing card
whyChoosearray<string>🟑 Conditional (~50%)Key differentiator bullet points from the listing card
reviewsarray<object>🟑 Opt-in (scrapeReviews)Full verified client review array (rating, projectName, projectCost, projectDuration, reviewer, reviewerRole, reviewerCompany, summary, datePublished)
discoveredFromstring🟒 High (100%)Category slug, country filter, or start URL that surfaced the record
scrapedAtstring🟒 High (100%)ISO-8601 UTC extraction timestamp

πŸ” Pagination & scale

The GoodFirms Scraper supports seamless deep pagination to collect 1,000+ B2B companies or software products in a single run:

  • Auto-governed pagination (maxPagesPerCategory: 0): By default, maxPagesPerCategory is 0 (unlimited). The scraper walks ?page=1, 2, 3 … across every selected category and country combination until maxRecords is reached or the category runs out of new companies.
  • End-of-category detection: If a page returns zero new companies (or only repeats already-queued slugs), the actor stops paginating that category immediately and moves to the next target.
  • Cross-category deduplication: Every company and software product is deduplicated globally by slug before profile scraping begins. Even if an agency appears across 8 different categories or countries, it is scraped and billed only once (while merging any card seed fields).
  • Safe-exit wall-clock guard: On massive multi-hundred-profile runs, the actor monitors the run timer and gracefully finishes in-flight workers before the platform timeout so partial datasets are never lost.

πŸ’» API Integration Examples

Python (apify-client)

from apify_client import ApifyClient
client = ApifyClient("YOUR_APIFY_TOKEN")
run = client.actor("haketa/goodfirms-scraper").call(run_input={
"mode": "companies",
"serviceCategorySlugs": ["web-development-agency", "ai-development-agency"],
"countrySlugs": ["us", "gb"],
"scrapeProfileDetails": True,
"maxRecords": 250,
"maxPagesPerCategory": 0,
})
for company in client.dataset(run["defaultDatasetId"]).iterate_items():
email = (company.get("contact") or {}).get("email")
linkedin = (company.get("socialLinks") or {}).get("linkedin")
print(f"{company['name']} | {company['hourlyRateRange']} | {company['employeesRange']} | {email} | {linkedin}")

Node.js / TypeScript (apify-client)

import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: 'YOUR_APIFY_TOKEN' });
const run = await client.actor('haketa/goodfirms-scraper').call({
mode: 'companies',
serviceCategorySlugs: ['digital-marketing-agency', 'seo-agency'],
scrapeProfileDetails: false,
maxRecords: 1000,
maxPagesPerCategory: 0,
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(`Extracted ${items.length} unique B2B agencies`);

cURL

curl -X POST "https://api.apify.com/v2/acts/haketa~goodfirms-scraper/runs?token=YOUR_APIFY_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"mode": "companies",
"serviceCategorySlugs": ["web-development-agency"],
"scrapeProfileDetails": false,
"maxRecords": 100
}'

❓ Frequently Asked Questions

What is the difference between scrapeProfileDetails: false and scrapeProfileDetails: true?

  • scrapeProfileDetails: false (Fast List Mode): Extracts all data directly from the category listing cards (name, websiteUrl, logoUrl, tagline, rating, reviewCount, hourlyRateRange, employeesRange, foundedYear, headquarters, aiTools, topReview, whyChoose). Because each category page holds ~10–60 companies, you can collect 1,000+ companies in just a couple of minutes.
  • scrapeProfileDetails: true (Full Profile Enrichment): Visits each company's individual /company/{slug} page in addition to the listing card, adding contact.email (~88%), contact.phone (~99.5%), socialLinks (LinkedIn ~92%), services % share, focusBreakdown %, offices, and full description.

How do I scrape 1,000+ companies in one run?

Set maxRecords: 1000 (or 0 for unlimited) and leave maxPagesPerCategory: 0. The scraper will automatically paginate as deep as needed across your chosen serviceCategorySlugs (or default categories) until 1,000 unique companies are collected.

Do I need to configure special proxies?

No. The default Apify Proxy configuration starts on low-cost datacenter IPs and automatically escalates to residential IPs only if a request is challenged.

Can I pass custom filtered GoodFirms URLs?

Yes! Copy any URL from goodfirms.co (such as a niche category, city page, or industry directory) and paste it into startUrls. The actor will automatically paginate through all pages of that URL.


Pair this GoodFirms scraper with complementary B2B intelligence actors from haketa:


πŸ” SEO Keywords

GoodFirms scraper Β· scrape GoodFirms Β· GoodFirms data extractor Β· GoodFirms lead generation Β· B2B agency scraper Β· software development companies list Β· digital marketing agency leads Β· SaaS directory scraper Β· Clutch alternative scraper Β· B2B contact email extractor Β· bulk export JSON CSV Excel API Β· 1,000+ results pagination Β· B2B intelligence


πŸ“‹ Changelog

VersionDateNotes
1.2.02026-11Unlocked 1,000+ deep pagination & auto page scaling: Changed maxPagesPerCategory default from 5 to 0 (unlimited, governed by maxRecords), removed the 100-record clamp when maxRecords > 100 is explicitly requested on default categories, added automatic multi-page pagination for category startUrls, and cleaned dataset schema validation.
1.1.02026-11Enhanced profile parser (cp2- layout + JSON-LD): Updated extractProfileExtras for GoodFirms' current profile DOM (services %, focusBreakdown %, full .cp2-about-text description) and pickCompanyOrg JSON-LD extraction (contact.email 88%, contact.phone 99.5%, reviewCount 99%).
1.0.102026-05Added automatic -agency canonical slug retry on first-page 404s and graceful Actor.exit status reporting.
1.0.02026-03Initial release β€” Companies & Software modes, server-side ICP filters, and verified review extraction.