BizQuest Business-for-Sale Scraper
Pricing
Pay per event
BizQuest Business-for-Sale Scraper
Extract public BizQuest businesses for sale with prices, locations, listing summaries, images, financials, business facts, and broker details when available.
Pricing
Pay per event
Rating
0.0
(0)
Developer
Stas Persiianenko
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
2 days ago
Last modified
Categories
Share
Turn public BizQuest acquisition inventory into structured, schedulable data. The Actor searches location and category pages, follows pagination, deduplicates listings, normalizes asking prices, and returns one dataset row per matching business.
Use it for deal sourcing, inventory monitoring, comparable valuations, market research, and public broker-lead workflows. No BizQuest account is required.
What this Actor does
- Accepts BizQuest search, category, location, and individual listing URLs.
- Builds a location search when no start URL is supplied.
- Discovers up to the requested number of current listing cards.
- Normalizes IDs, URLs, prices, locations, summaries, images, and listing flags.
- Optionally attempts detail enrichment for business facts and public broker fields.
- Re-applies every filter to normalized records instead of trusting source-side filtering.
- Uses mobile-profile HTTP through rotating US residential sessions because BizQuest blocks normal datacenter HTTP.
- Charges only for records that are saved.
Who is it for?
Search funds and SMB buyers
Schedule a daily state or industry search and compare stable businessId values with yesterday's dataset to identify new opportunities.
Brokers and M&A advisors
Track visible inventory, asking-price movements, listing positioning, and public contact information when it is available.
Lenders and valuation teams
Collect comparable asking-price and cash-flow observations for a geography or vertical. Treat asking prices as seller claims, not completed transaction values.
Deal-data teams
Feed normalized records into a warehouse, spreadsheet, CRM, or enrichment pipeline through the Apify API.
Extracted data
| Field group | Examples |
|---|---|
| Identity | businessId, listingUrl, sourceUrl, title |
| Financials | askingPrice, cashFlow, grossIncome, plus original text values |
| Location | city, state, county, zip, location |
| Classification | industry, isHomeBased, isRelocatable, isFranchise |
| Business facts | yearEstablished, employees, inventory, realEstate, ffe |
| Narrative | description, facilities, growthExpansion, supportTraining, reasonForSelling, financing |
| Media | imageUrls |
| Public contact | brokerName, brokerCompany, brokerPhone, brokerEmail |
| Audit | listingDate, scrapedAt |
Fields are nullable because sellers disclose different information. Search-card rows always prioritize the stable ID, title, URL, location, price, summary, and image. Optional detail fields appear only when BizQuest serves the detail page to the current session.
Quick start
- Open the Actor in Apify Console.
- Keep the prefilled California search or enter another BizQuest URL.
- Set
maxItemsto a small value for the first run. - Leave Enrich listing details off for the fastest and most reliable inventory pull.
- Confirm the recommended US residential proxy configuration.
- Click Start.
- Open the Dataset tab to inspect or export results.
Input parameters
| Input | Type | Default | Meaning |
|---|---|---|---|
startUrls | array | empty | BizQuest search/category/location or individual listing URLs |
location | string | empty | State or location used to create a search URL and strictly filter rows |
industry | string | empty | Case-insensitive industry/title/description substring |
keywords | string | empty | Space-separated terms that must all match |
minAskingPrice | number | empty | Minimum disclosed numeric asking price |
maxAskingPrice | number | empty | Maximum disclosed numeric asking price |
minCashFlow | number | empty | Minimum disclosed cash flow or SDE |
listedWithinDays | integer | empty | Require a public listing date inside this age window |
includeDetails | boolean | false | Attempt detail enrichment; challenged details fall back to card data |
maxItems | integer | 100 | Maximum matching, deduplicated rows |
maxSearchPages | integer | 20 | Pagination safety bound per search URL |
proxyConfiguration | object | US residential | Apify Proxy settings |
Example input
{"location": "California","keywords": "restaurant","maxItems": 25,"maxSearchPages": 3,"includeDetails": false,"proxyConfiguration": {"useApifyProxy": true,"groups": ["RESIDENTIAL"],"countryCode": "US"}}
Example output
This abbreviated example reflects a current local extraction; nullable detail fields are omitted.
{"businessId": "2474206","listingUrl": "https://www.bizquest.com/business-for-sale/established-thai-restaurant/BW2474206/","sourceUrl": "https://www.bizquest.com/businesses-for-sale-in-california/","title": "Established Thai Restaurant","askingPrice": 220000,"askingPriceText": "$220,000","location": "Cypress, CA","state": "CA","description": "Established Thai Restaurant Cypress, CA ... $220,000","imageUrls": ["https://images.bizquest.com/shared/listings/example.webp"],"isHomeBased": false,"isRelocatable": false,"isFranchise": false,"scrapedAt": "2025-01-15T12:00:00.000Z"}
Filtering behavior
Filters are enforced after extraction for both discovery and explicit URL inputs. This matters because a source page or upstream URL can occasionally contain out-of-scope inventory.
A numeric filter excludes listings where that number is not publicly disclosed. For example, minCashFlow: 100000 does not include a listing with “Cash flow: Contact seller.” listedWithinDays similarly requires a parseable public listing date.
maxItems counts only accepted, deduplicated rows. The Actor can inspect more source cards than it saves when filters are selective.
Detail enrichment
Set includeDetails to true when facilities, support, reason for selling, or public broker fields matter more than speed. BizQuest can independently challenge detail-page navigation even after serving a search page. The Actor detects that response, tries one rotated residential session, and then preserves useful search-card data rather than losing the listing.
For recurring inventory monitoring, leave enrichment off and enrich only newly observed IDs in a second run.
Pricing
This Actor uses pay-per-event pricing:
- a small one-time Start event per run;
- one Business listing extracted event per saved row.
Apify Console displays the active price for your account tier before a run. Proxy and compute use are covered by the Actor price; you do not need to calculate residential traffic separately. Because only accepted rows are charged, rejected filters, duplicates, challenged detail attempts, and empty searches do not create item charges.
For predictable spend, begin with maxItems: 10, inspect the Console estimate, and then increase the bound. Larger scheduled pulls generally make the one-time start event a smaller portion of total cost.
Scheduling and change detection
Use an Apify schedule for daily or weekly monitoring. Keep the same input and compare businessId across datasets:
- New ID: newly observed inventory.
- Missing ID: removed, sold, expired, or outside the current search page bound.
- Same ID with a changed asking price: possible price update.
- Same ID with changed summary text: seller or broker revised the listing.
Do not infer a completed sale from disappearance alone.
Export and integrations
Dataset results can be exported as JSON, CSV, Excel, XML, or RSS. Common workflows include:
- send new IDs to Google Sheets;
- upsert listings into Airtable or a CRM;
- load daily snapshots into BigQuery or Snowflake;
- trigger Slack alerts for price/cash-flow thresholds;
- enrich public broker companies in a separate compliant workflow.
Run with the API
Replace YOUR_APIFY_TOKEN with a secret token. Never commit tokens.
cURL
curl -X POST \"https://api.apify.com/v2/acts/automation-lab~bizquest-business-for-sale-scraper/runs?token=YOUR_APIFY_TOKEN" \-H "Content-Type: application/json" \-d '{"location":"California","maxItems":10,"includeDetails":false}'
JavaScript
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: process.env.APIFY_TOKEN });const run = await client.actor('automation-lab/bizquest-business-for-sale-scraper').call({location: 'California',maxItems: 10,includeDetails: false,});const { items } = await client.dataset(run.defaultDatasetId).listItems();console.log(items);
Python
import osfrom apify_client import ApifyClientclient = ApifyClient(os.environ["APIFY_TOKEN"])run = client.actor("automation-lab/bizquest-business-for-sale-scraper").call(run_input={"location": "California", "maxItems": 10, "includeDetails": False})items = client.dataset(run["defaultDatasetId"]).list_items().itemsprint(items)
Use with Apify MCP
Add the Actor to Claude Code:
claude mcp add --transport http apify \"https://mcp.apify.com?tools=automation-lab/bizquest-business-for-sale-scraper"
Claude Desktop, Cursor, or VS Code configuration:
{"mcpServers": {"apify": {"url": "https://mcp.apify.com?tools=automation-lab/bizquest-business-for-sale-scraper"}}}
Example prompts:
- “Find up to 20 BizQuest restaurant listings in California and sort disclosed asking prices.”
- “Run the BizQuest Actor weekly and summarize newly observed business IDs.”
- “Export matching listings under a disclosed $750,000 asking price to CSV.”
Reliability and limits
BizQuest actively rejects ordinary datacenter requests. Keep the recommended US residential proxy enabled. The Actor uses lightweight mobile-profile HTML requests, downloads no image bodies or browser assets, and rotates identity only after a verified challenge.
A challenge page is treated as an error, never as a valid empty result. Transient network and server errors receive bounded backoff. Detail challenges fall back only when a real search-card record already exists. Malformed inputs and non-BizQuest URLs fail closed.
Website structure and seller disclosures change. Schedule monitoring runs and validate important financial decisions against the original listing.
Legality and responsible use
This Actor accesses public pages without logging in. You are responsible for following applicable laws, BizQuest terms, privacy rules, and contractual obligations.
Use public contact information only for a legitimate, proportionate purpose. Respect suppression requests and anti-spam law. Do not use the output for harassment, discrimination, identity inference, or automated decisions about individuals. Do not republish copyrighted descriptions or images without permission.
Troubleshooting
Why did the run fail with an access or challenge error?
Confirm proxyConfiguration uses Apify Proxy, the RESIDENTIAL group, and US geography. Do not switch to datacenter proxy for this source.
Why are broker or facilities fields missing?
Those values depend on successful detail enrichment and seller disclosure. Enable includeDetails; expect card fallback if BizQuest challenges the detail route.
Why did a numeric filter return fewer rows than expected?
Listings with “contact seller” or another non-numeric value are intentionally excluded from numeric filters.
Why did I receive zero rows?
Check that filters are not mutually exclusive, increase maxSearchPages, and verify the public search URL in a browser. A challenge does not return zero rows—it fails explicitly.
FAQ
Does this Actor require a BizQuest account?
No. It is limited to anonymously visible public inventory.
Does it scrape sold prices?
No. Asking price is a seller-provided listing value, not a verified transaction price.
Can I pass an individual listing URL?
Yes. Explicit public BizQuest listing URLs are accepted and receive the same filters. If BizQuest challenges that only page and no search-card fallback exists, the run fails instead of inventing a record.
Are results guaranteed to be complete?
No. Completeness depends on public inventory, pagination bounds, filters, seller disclosures, and source availability.
Related automation-lab Actors
Combine this source with other acquisition inventory Actors from automation-lab, including BizBuySell, BizBen, BusinessesForSale, Flippa, and Empire Flippers scrapers. Keep source IDs separate: similarly titled businesses across marketplaces are not automatically the same entity.
Support
When reporting a problem, include the run URL, redacted input, whether detail enrichment was enabled, and one affected public BizQuest URL. Do not paste Apify tokens or private CRM data.