BizQuest Business-for-Sale Scraper avatar

BizQuest Business-for-Sale Scraper

Pricing

Pay per event

Go to Apify Store
BizQuest Business-for-Sale Scraper

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

Stas Persiianenko

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

2 days ago

Last modified

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 groupExamples
IdentitybusinessId, listingUrl, sourceUrl, title
FinancialsaskingPrice, cashFlow, grossIncome, plus original text values
Locationcity, state, county, zip, location
Classificationindustry, isHomeBased, isRelocatable, isFranchise
Business factsyearEstablished, employees, inventory, realEstate, ffe
Narrativedescription, facilities, growthExpansion, supportTraining, reasonForSelling, financing
MediaimageUrls
Public contactbrokerName, brokerCompany, brokerPhone, brokerEmail
AuditlistingDate, 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

  1. Open the Actor in Apify Console.
  2. Keep the prefilled California search or enter another BizQuest URL.
  3. Set maxItems to a small value for the first run.
  4. Leave Enrich listing details off for the fastest and most reliable inventory pull.
  5. Confirm the recommended US residential proxy configuration.
  6. Click Start.
  7. Open the Dataset tab to inspect or export results.

Input parameters

InputTypeDefaultMeaning
startUrlsarrayemptyBizQuest search/category/location or individual listing URLs
locationstringemptyState or location used to create a search URL and strictly filter rows
industrystringemptyCase-insensitive industry/title/description substring
keywordsstringemptySpace-separated terms that must all match
minAskingPricenumberemptyMinimum disclosed numeric asking price
maxAskingPricenumberemptyMaximum disclosed numeric asking price
minCashFlownumberemptyMinimum disclosed cash flow or SDE
listedWithinDaysintegeremptyRequire a public listing date inside this age window
includeDetailsbooleanfalseAttempt detail enrichment; challenged details fall back to card data
maxItemsinteger100Maximum matching, deduplicated rows
maxSearchPagesinteger20Pagination safety bound per search URL
proxyConfigurationobjectUS residentialApify 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:

  1. New ID: newly observed inventory.
  2. Missing ID: removed, sold, expired, or outside the current search page bound.
  3. Same ID with a changed asking price: possible price update.
  4. 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 os
from apify_client import ApifyClient
client = 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().items
print(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.

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.