GoodFirms Scraper - Agency Reviews avatar

GoodFirms Scraper - Agency Reviews

Pricing

from $0.01 / 1,000 results

Go to Apify Store
GoodFirms Scraper - Agency Reviews

GoodFirms Scraper - Agency Reviews

Extract agency profiles, reviews, ratings & service offerings from GoodFirms. Ideal for B2B lead generation, competitor analysis & agency research.

Pricing

from $0.01 / 1,000 results

Rating

0.0

(0)

Developer

The Howlers

The Howlers

Maintained by Community

Actor stats

2

Bookmarked

15

Total users

0

Monthly active users

6 days ago

Last modified

Security

Limited permissions

Share

GoodFirms Directory Scraper

Find any company on GoodFirms by name and get its real profile: name, profile URL, every office address with its phone, main phone, email, website, rating, review count, hourly rate, employees, year founded, services, service and industry focus, and reviews. Or list companies by category and city. Built by John Rippy (https://www.linkedin.com/in/johnrippy/ | https://johnrippy.link/).

Note: this actor runs in Demo Mode by default, so a default free run returns sample data. Set demoMode to false to fetch real data.


How it reads the site

GoodFirms sits behind a Cloudflare bot check and rate-limits scripted requests. The actor opens it in a stealth Firefox (Camoufox) whose fingerprint matches an Apify residential IP, keeps one session for the run, and reads each page with a normal, paced page load. It reads public pages only and never logs in.


Quick Start

Test with Demo Mode (free)

{
"demoMode": true
}

Look up one company (citation check)

{
"demoMode": false,
"searchQuery": "Brolik",
"location": "Philadelphia, PA",
"maxResults": 3
}

Read profiles you already have

{
"demoMode": false,
"profileUrls": [
"https://www.goodfirms.co/company/smartsites"
],
"includeReviews": true
}

List SEO agencies in a city

{
"demoMode": false,
"category": "seo",
"location": "Detroit, MI",
"maxResults": 20
}

Input Parameters

ParameterTypeDefaultDescription
demoModebooleantrueRun with sample data without making API calls. Great for testing the actor.
searchQuerystring-A company name to find its GoodFirms profile (e.g. 'SmartSites'), or a service to list companies (e.g. 'SEO agencies', 'web development company').
profileUrlsarray-GoodFirms company pages to read directly, e.g. https://www.goodfirms.co/company/smartsites. When set, the search is skipped.
categorystring-Filter by company category.
locationstring-City and state, e.g. 'Detroit, MI'. For a company name it ranks the profile in this location first and sets locationMatch on each row; for a service or category it lists companies in that city.
maxResultsinteger50Maximum number of companies to scrape.
includeReviewsbooleanfalseAdd the reviews shown on each company page.
webhookUrlstring-URL to POST results when scraping completes (Zapier, Make, n8n, custom endpoint)
proxyConfigurationobject{"useApifyProxy": true, "apifyProxyGroups": ["RESIDENTIAL"]}GoodFirms blocks datacenter IPs. The default Apify RESIDENTIAL proxy (US) is used with one sticky session per run.

Output

Each company or product is one dataset row:

  • name, url (the GoodFirms profile), goodfirmsId
  • address {street, city, state, postalCode, country, full} of the headquarters
  • locations[]: every office with isHeadquarters, country, address, phone
  • phone, email, website
  • rating, reviewCount, hourlyRate, employees, founded
  • services, serviceFocus[], industries, industryFocus[], clientFocus[], socialLinks, description, tagline
  • reviews[] when includeReviews is on
  • searchQuery, searchLocation, matchScore (1 = same name), locationMatch, source

When GoodFirms has no profile with that name the dataset gets one row with status: "not_found" and a _notice. When GoodFirms blocks every session the row has status: "blocked". Neither is charged.


Pricing

This actor uses pay-per-event billing:

EventWhen it is chargedPrice
Actor startOnce when the run starts, one event per GB of memory (minimum one). At the default 2 GB of memory a run starts at $0.20$0.10 per GB
Agency ScrapedPer agency profile scraped$0.04
ResultEach item written to the default dataset$0.00001

Demo mode is free: no charges for sample data.


Troubleshooting

The run returned a "blocked" row

The site answered every proxy session with a bot check. Nothing was charged. Run again later.

The run returned a "not_found" row

The site has no listing with that name. Check the spelling, or pass the listing URL directly.

How do I test for free?

Enable Demo Mode. It returns labeled sample rows and charges no task events.


Built by John Rippy | Actor Arsenal