GoodFirms Companies Directory Scraper
parseforge/goodfirms-companies-scraper
Lead generation
Scrapes GoodFirms company profiles from any category slug. Returns each company as a flat row with rating, reviews, location, and service details. Filter by country and minimum rating.
- Total users
- 1
- Monthly active
- 0
- Total runs
- 87
- Bookmarked
- 0
- Rating
- Not rated yet
- Last modified
- 9 days ago
Overview
GoodFirms Companies Directory Scraper
Scrape GoodFirms company profiles from any category, filtered by country and rating, up to a million per run. Every company comes with its name, rating, reviews, hourly rate, location, and service details. Export to CSV, JSON, Excel, or XML.
GoodFirms is a B2B directory of IT service providers, but manually copying company lists for lead generation or market research is slow and repetitive. This Actor reads the public category listings directly, applies your country and minimum rating filters, and returns each matching company in a consistent flat schema. No API key or browser automation needed.
| Who uses it | What they scrape GoodFirms for |
|---|---|
| B2B sales teams | Build targeted lead lists of IT agencies filtered by country and minimum rating. |
| Market researchers | Analyze the competitive landscape of service providers in a specific category. |
| Recruitment agencies | Identify top-rated companies in a niche to source potential clients or partners. |
| Business analysts | Track the distribution of ratings and hourly rates across different service categories. |
What it does
This Actor collects GoodFirms company profiles by category slug and returns each one as a flat row with its rating, reviews, location, and service details.
- ๐ข Category-driven scraping: Provide a category slug like "mobile-app-development" and the Actor discovers all listed companies.
- ๐ Country filter: Narrow results to companies in a specific country, so you only get relevant local providers.
- โญ Minimum rating threshold: Set a floor rating from 0 to 5 and only collect companies that meet your quality bar.
- ๐ Structured output: Each company is returned as a flat row, ready for analysis in spreadsheets or databases.
Results export to CSV, JSON, Excel, or XML, or straight from the API.
What you can do with GoodFirms data
๐ฏ Generate a lead list of top mobile app developers.
A sales manager scrapes the "mobile-app-development" category, sets minRating to 4.5 and country to "United States", and exports a CSV of highly-rated prospects for outreach.
๐ Compare hourly rates across categories.
A business analyst runs the Actor on multiple category slugs, collects the hourly rate field, and builds a pricing benchmark report for procurement.
๐ Map the geographic distribution of a service niche.
A market researcher scrapes the "ai-development" category without a country filter, then groups the results by location to identify regional hubs.
โญ Monitor new entrants with high ratings.
An investor sets a high minRating and runs the Actor weekly on a category, tracking which new companies appear with strong initial reviews.
Why choose this scraper
| What you get | |
|---|---|
| No API registration | Reads the public directory pages directly, no OAuth or API key required. |
| Flexible filtering | Combine category, country, and rating filters to target exactly the companies you need. |
| Scalable collection | Collect up to a million companies per run, limited only by what the category contains. |
| Fixed output schema | Every run returns the same fields, making it easy to merge datasets over time. |
How it compares
This Actor focuses on fast, filterable company directory extraction by category, while other GoodFirms scrapers may include reviews or enriched profiles.
| Feature | ParseForge | GoodFirms Scraper - Agency Reviews | GoodFirms Company Scraper - Low-cost | Goodfirms Scraper |
|---|---|---|---|---|
| Category-based scraping | Yes, by category slug | Not listed | Not listed | Yes |
| Country filter | Yes | Not listed | Not listed | Not listed |
| Minimum rating filter | Yes | Not listed | Not listed | Not listed |
| Hourly rate extraction | Yes | Not listed | Yes | Yes |
| Multi-office address extraction | Not listed | Not listed | Not listed | Yes |
| Review text extraction | Not listed | Yes | Yes | Yes |
Configure the run
Drive the Actor with a GoodFirms category slug, and optionally filter by country and minimum rating so only matching companies reach your dataset. The Input tab lists every parameter.
A first run with the defaults:
{
"category": "mobile-app-development",
"maxItems": 10
}
A larger pull:
{
"category": "mobile-app-development",
"maxItems": 200
}
Pricing
Pay-per-result: $0.0085 per result collected. You pay only for the results written to your dataset.
| Results collected | Approximate cost |
|---|---|
| 100 results | $0.85 |
| 1,000 results | $8.50 |
| 10,000 results | $85.00 |
New Apify accounts start with $5 in free credit.
Free users
Free-plan runs return up to 10 results as a preview. Upgrade your Apify plan to collect up to 1,000,000 results per run.
Run it
- Create a free Apify account with $5 in credit.
- Open the GoodFirms Companies Directory Scraper.
- Set your inputs and any filters, then click Start.
- Export the results as CSV, Excel, JSON, or XML from the Dataset tab.
Run it programmatically through the Apify API (run-sync-get-dataset-items) or the ApifyClient for JavaScript and Python.
Use with AI agents (MCP)
Give an AI agent live access to GoodFirms through the Model Context Protocol. Add the Actor to Claude, Cursor, or any MCP client:
claude mcp add --transport http apify "https://mcp.apify.com?tools=parseforge/goodfirms-companies-scraper"
Then prompt it in plain language to run the scraper and read back the results.
Troubleshooting
Why am I getting no results?
Check that your category slug is correct by visiting the GoodFirms category page in a browser. Also verify that your country filter and minRating are not too restrictive for that category.
The Actor returns fewer companies than maxItems.
This is normal if the category has fewer companies than your maxItems value, or if your country and rating filters reduce the pool. Try removing the optional filters to see the full list.
I get an error about an invalid category slug.
Ensure the slug matches exactly what appears in the GoodFirms URL. It is case-sensitive and should not include slashes or the full URL, only the slug part.
The run is slow for large categories.
The Actor respects GoodFirms' servers by pacing requests. For very large categories, increase the run timeout in your Apify settings rather than trying to speed up the Actor itself.
Some company fields are empty in the output.
GoodFirms profiles do not always have every field populated. If a company has not listed its hourly rate or employee count, those fields will be empty in your dataset.
FAQ
| Question | Answer |
|---|---|
| What is a GoodFirms category slug? | It is the last part of the URL when you browse a category on GoodFirms, for example "mobile-app-development" in the URL goodfirms.co/directory/category/mobile-app-development. You provide this slug in the input. |
| Can I scrape multiple categories in one run? | The Actor processes one category slug per run. To scrape multiple categories, run the Actor multiple times with different slugs, or use an Apify workflow to chain the runs. |
| Does this Actor scrape company reviews? | This Actor focuses on the company directory listing and profile data. It does not scrape individual review texts. For reviews, consider a dedicated GoodFirms reviews scraper. |
| How do I filter by country? | Enter the country name in the optional "Country" input field. The Actor will only return companies whose listed location matches that country. |
| What happens if I set maxItems higher than the available companies? | The Actor will collect all companies that match your filters and stop when the category listing is exhausted. It will not fail or return empty rows. |
| Is the rating filter applied before or after collection? | The minimum rating filter is applied as the Actor reads each company, so only companies that meet the threshold are written to your dataset. |
| Can I get the company website and contact details? | Yes, the Actor returns the profile data that is publicly visible on the GoodFirms listing, which typically includes the company website and contact information. |
| Do I need a GoodFirms account to use this Actor? | No, the Actor reads the publicly accessible directory pages. No login, API key, or account is required. |
| What output formats are supported? | You can export your results to CSV, JSON, Excel, or XML from the Apify dataset tab. |
| How often is the GoodFirms data updated? | The Actor reads the live GoodFirms website each time it runs, so you always get the current data as it appears on the directory. |
Related actors
Browse the full ParseForge collection for more scrapers.
๐ Need help? Email parseforge@protonmail.com with your run ID, your input, and what you expected.
โ ๏ธ Disclaimer. This Actor is unofficial and is not affiliated with, endorsed by, or sponsored by GoodFirms. It collects only publicly available data. You are responsible for using the collected data in compliance with the source's terms of service and applicable data-protection laws, including GDPR, CCPA, and PIPL. Do not use it to collect personal data unlawfully.
Input
| Field | Type | What it does | Default |
|---|---|---|---|
| category | string | GoodFirms category slug (e.g. "mobile-app-development"). | mobile-app-development |
| maxItems | integer | How many companies to collect per run. | 10 |
| country | string | Optional country filter. | not set |
| minRating | number | Optional minimum rating (0 to 5). | not set |
Pricing
from $7.50 per 1,000 results
| Charged for | What it is | Price each |
|---|---|---|
| result | Single result in the default dataset. | $0.0075 to $0.0085 |
Tiered: the lower figure is the price on a higher Apify plan. Billing and the free credit live on Apify.
API
One POST returns the dataset directly. Same shape for every scraper in the library, so swapping the slug is the only change.
curl -X POST "https://api.apify.com/v2/acts/parseforge~goodfirms-companies-scraper/run-sync-get-dataset-items?token=$APIFY_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"helloWorld": 123
}' Examples
Input that runs as-is.
{
"helloWorld": 123
} Reviews
No reviews yet. Be the first.
Issues
We build and maintain this scraper, so a problem with it comes to us. Report it on the Apify listing and the thread stays attached to the scraper where the next person can find it: open an issue.
Broken and urgent, or you would rather not post in public? Write to parseforge@protonmail.com and it reaches the people who wrote it.
Related scrapers
Run GoodFirms Companies Directory Scraper on Apify All scrapers
