BizQuest Scraper $1๐Ÿ’ฐ Businesses, Franchises & Asset Listings avatar

BizQuest Scraper $1๐Ÿ’ฐ Businesses, Franchises & Asset Listings

Pricing

from $1.00 / 1,000 listing results

Go to Apify Store
BizQuest Scraper $1๐Ÿ’ฐ Businesses, Franchises & Asset Listings

BizQuest Scraper $1๐Ÿ’ฐ Businesses, Franchises & Asset Listings

Extract business-for-sale, franchise, and asset listings from BizQuest. Search by category, US state, asking price, or use BizQuest URLs. Returns 50+ fields, including asking price, location, photos, broker name and phone where available, ready for CRM, deal pipeline, or spreadsheet use.

Pricing

from $1.00 / 1,000 listing results

Rating

0.0

(0)

Developer

Abot API

Abot API

Maintained by Community

Actor stats

0

Bookmarked

8

Total users

0

Monthly active users

3 days ago

Last modified

Share

BizQuest Scraper: Business-for-Sale Listings, Broker Contacts and Financials

BizQuest Scraper turns BizQuest into a clean deal-flow feed. Get the asking price, cash flow, EBITDA, category, location and the broker's full contact block (name, phone, brokerage, profile link) for every business-for-sale, franchise and asset listing. Search by category, US state and price band, or paste BizQuest search and category links directly. Turn on full detail mode for gross income, inventory, employee counts and reasons for selling, then export to JSON, CSV or Excel, or pull results straight into your app through the API.

Why This Scraper?

  • 50+ fields on every listing, including the full broker contact block (name, phone, brokerage, profile link), something many quick scrapers skip.
  • Two ways to find listings. Filter by category, US state, keyword and asking price, or paste any BizQuest search or category URL and skip the filters entirely.
  • Optional full detail mode. Turn on includeDetails for about 30 more fields per listing: gross income, inventory, FF&E, employee counts, reasons for selling, financing and year established.
  • No page limit by default. maxPages defaults to unlimited, and the run stops on its own once the site's own reported total is reached. maxListings (default 20, 0 for unlimited) is the one cap you set.
  • Two different ways to keep a search current. Resume one interrupted run from its run or dataset id, or turn on incremental mode to schedule the same search repeatedly and get back only what changed.
  • Nothing is dropped. Every record keeps the complete source item under raw, so a field the site adds later still reaches your dataset without a code change.
  • Keeps working through refused connections. When a connection is refused, the actor automatically retries with a different one instead of stopping the run, and it logs plainly when your connection setup is not being admitted reliably.

Use Cases

  • Business brokers and M&A advisors: track new listings and price movements across categories and states to feed a prospecting pipeline.
  • Buy-side searchers and search funds: build a filtered deal-flow list by industry, price band or state, and monitor it on a schedule for new matches.
  • Market researchers and analysts: measure asking price, cash flow and EBITDA trends across categories and regions over time.
  • Franchise resale trackers: use the franchise fee and capital fields to watch franchise resale activity by category.
  • Lead generation for lenders and service providers: use the broker contact fields to build outreach lists tied to active listings.

Data You Get

Sample shape, values are illustrative placeholders, not from a live listing.

FieldExample
id20000001
title"Sample Established Service Company"
url"https://www.bizquest.com/business-for-sale/sample-listing/BW20000001/"
description"Recurring-revenue service company with a stable client base."
askingPrice750000
cashFlow220000
ebitda180000
category"Home & Garden"
location"Florida"
region"FL"
stateName"Florida"
isFranchisefalse
initialFeenull
initialCapitalnull
brokerName"Jane Doe"
brokerCompany"Sample Brokerage"
brokerPhone"+10000000000"
brokerProfileUrl"/business-broker/sample-brokerage/jane-doe/BW00000/"
image"https://images.bizquest.com/shared/listings/000000000.jpg"
hotPropertyfalse
recentlyAddedtrue
rawthe complete source item for this listing

Every record also carries images (the full photo array), locationCrumbs, categoryId, listingTypeId, leaseRatePerSquareFoot, realEstateIncludedInAskingPrice, financingTypeId, the full contactInfo block (broker contact, verbatim) and diamondMetaData block, plus sourceUrl and scrapedAt. With includeDetails on, each record also gains grossIncome, inventory, ffe, employeesFullTime, employeesPartTime, yearEstablished, buildingSquareFeet, summary, support, financingOptions, reasonsForSelling, competition, growth, fullDescription, leaseTerms and the full detail object under detailRaw, and cash flow, gross income and EBITDA fill in wherever the seller discloses them on the detail page. With incremental mode on, every returned record also carries changeType, changedFields, firstSeenAt and lastSeenAt.

How to Use

  1. Pick a mode: search (build a filtered search from category, state, price band and keyword) or url (paste one or more BizQuest search or category links; filters are ignored in this mode).
  2. For search mode, fill in the category, locations, price range and keyword you want. For URL mode, paste the links.
  3. Turn on Fetch full listing details if you want the extra financial and description fields.
  4. Set Max listings to control run size and cost, then click Start.

Search one state:

{
"mode": "search",
"locations": ["Florida"],
"maxListings": 100
}

Category plus state plus price band:

{
"mode": "search",
"category": "Food & Beverage",
"locations": ["California"],
"minPrice": 200000,
"maxPrice": 800000,
"includeDetails": true,
"maxListings": 100
}

Paste BizQuest URLs (filters are ignored in this mode):

{
"mode": "url",
"urls": [
"https://www.bizquest.com/businesses-for-sale-in-florida-fl/",
"https://www.bizquest.com/food-and-beverage-businesses-for-sale/"
],
"maxListings": 200
}

Recurring monitoring of the same search:

{
"mode": "search",
"locations": ["Florida"],
"incrementalMode": true,
"maxListings": 0
}

Run it from your code

Python:

from apify_client import ApifyClient
client = ApifyClient("<YOUR_APIFY_TOKEN>")
run = client.actor("abotapi/bizquest-scraper").call(run_input={"mode": "search", "locations": ["Florida"], "maxListings": 100})
for listing in client.dataset(run["defaultDatasetId"]).iterate_items():
print(listing["title"], listing["askingPrice"])

JavaScript:

import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: '<YOUR_APIFY_TOKEN>' });
const run = await client.actor('abotapi/bizquest-scraper').call({ mode: 'search', locations: ['Florida'], maxListings: 100 });
const { items } = await client.dataset(run.defaultDatasetId).listItems();

Or connect it to Make, Zapier, n8n, Google Sheets or webhooks from the Integrations tab.

Resume and recurring updates

  • Resume (resumeFromRunId) continues one specific interrupted run: paste its run id or dataset id and the actor skips every listing it already collected there, so this run returns only the delta and you don't pay twice.
  • Incremental mode (incrementalMode) is for scheduled runs over the same search. Each listing is classified NEW, UPDATED (with changedFields), UNCHANGED (suppressed and not billed unless emitUnchanged is on), or EXPIRED (only after a run that scanned the whole tracked search with emitExpired on). A listing only comes back classified REAPPEARED after it was previously marked EXPIRED and is then found again on a later run. stateKey names or shares the stored state; otherwise it is derived automatically from your search filters, so different searches never mix state.

Send results into your apps (MCP connectors)

Optionally pipe the scraped results into the apps you already use, via Model Context Protocol (MCP) connectors. This is an extra delivery step after the scrape, the Apify dataset is never changed.

What gets written to the connector: a condensed, human-readable summary of each record, not the full JSON. Each item becomes one entry with a title and its key fields flattened to plain text. The complete record always stays in the Apify dataset.

  1. Authorize a connector once under Apify > Settings > Integrations (Notion, Linear, Airtable, or Apify).
  2. Select it in the "Pipe results into your apps" input field. If the picker is empty, you haven't authorized a connector yet.
  3. For Notion, also set notionParentPageUrl to the page where items should be created.

The connection is mediated by Apify's MCP proxy, so this actor never sees your third-party credentials. Leave the field empty to skip.

Input Parameters

ParameterTypeDefaultDescription
modestringsearchsearch builds a filtered search from the fields below, url walks pasted BizQuest URLs instead.
categorystring(any)Industry category dropdown (search mode). Leave empty for all categories.
locationsarraynone (prefill: ["Florida"])US states by name or two-letter code. One search runs per state. Leave empty for nationwide.
keywordstringnonePhrase to match in the listing title or description, applied after fetch.
sortBystring(featured)Server-side order by price or cash flow, low to high or high to low. Ranks the whole result set before paging. Leave empty for the site's featured order.
minPriceintegernoneOnly keep listings at or above this asking price, in USD. Listings with no disclosed price are excluded when set.
maxPriceintegernoneOnly keep listings at or below this asking price, in USD.
urlsarraynone (prefill: one sample search URL)BizQuest search or category URLs (URL mode). Filter fields above are ignored in this mode.
includeDetailsbooleanfalseAdds about 30 more fields per listing: gross income, inventory, FF&E, full description, employees, reasons for selling, financing and year established.
maxPagesinteger0Optional bound on result pages (50 listings each) walked per search or URL. 0 means walk the whole catalog and stop on its own at the site's reported total, an empty page, or a page that repeats content already served. Does not cap listing count; use Max listings for that.
maxListingsinteger20The one cap on total listings collected (maximum 100000). 0 means unlimited.
resumeFromRunIdstringnoneID of a previous run of this actor (or a dataset ID). Listings already in that dataset are skipped, so this run returns only new listings, a delta.
incrementalModebooleanfalseTurn on for recurring or scheduled monitoring of the same search. Returns only NEW and UPDATED listings by default, instead of the full result set every time. EXPIRED, and later REAPPEARED, appear only with emitExpired on.
stateKeystringnoneNames the incremental-mode monitoring campaign explicitly. Leave empty to let the actor derive a key automatically from the search filters.
emitUnchangedbooleanfalseIncremental mode only. Also return, and bill, listings that haven't changed, marked UNCHANGED.
emitExpiredbooleanfalseIncremental mode only. Also return, and bill, listings no longer found, marked EXPIRED, produced only after a complete, uncapped, non-resumed scan.
proxyobjectResidential USConnection settings. Residential US is recommended and is the default.
mcpConnectorsarraynoneOptional: send a summary of each record to apps you authorized under Integrations.
notionParentPageUrlstringnoneNotion connector only: page under which item pages are created.
maxNotifyListingsinteger50Cap on items written to each connector per run. Does not affect the dataset.

Output Example

Sample shape, values are illustrative placeholders, not from a live listing.

{
"id": 20000001,
"listNumber": 20000001,
"title": "Sample Established Service Company",
"url": "https://www.bizquest.com/business-for-sale/sample-listing/BW20000001/",
"description": "Recurring-revenue service company with a stable client base.",
"image": "https://images.bizquest.com/shared/listings/000000000.jpg",
"images": ["https://images.bizquest.com/shared/listings/000000000.jpg"],
"askingPrice": 750000,
"cashFlow": 220000,
"ebitda": 180000,
"location": "Florida",
"region": "FL",
"stateName": "Florida",
"category": "Home & Garden",
"categoryId": 316,
"isFranchise": false,
"brokerName": "Jane Doe",
"brokerCompany": "Sample Brokerage",
"brokerPhone": "+10000000000",
"brokerProfileUrl": "/business-broker/sample-brokerage/jane-doe/BW00000/",
"contactInfo": { "contactFullName": "Jane Doe", "brokerCompany": "Sample Brokerage" },
"hotProperty": false,
"recentlyAdded": true,
"sourceUrl": "https://www.bizquest.com/businesses-for-sale-in-florida-fl/",
"scrapedAt": "2026-01-01T00:00:00.000000+00:00",
"raw": { "header": "Sample Established Service Company", "price": 750000, "urlStub": "sample-established-service-company" }
}

Plan Requirement

The default connection setting works out of the box, and the actor automatically retries with a different connection whenever one is refused. BizQuest reliably admits residential connections, so for dependable results run this actor on an Apify plan that includes Residential proxy access and keep the connection group set to Residential (country US). Without a residential connection, a run may complete successfully but return few or zero listings.

FAQ

How much does it cost?

You pay per listing returned, plus an optional charge when full detail mode fetches extra fields. The Pricing tab shows the current rates. Use Max listings to cap the cost of any run.

This actor collects only publicly available business-for-sale listing data. You are responsible for how you use it: follow BizQuest's terms and the laws that apply to you, and get legal advice if you plan commercial redistribution. Broker names and phone numbers are contact details the listing itself publishes; handle them accordingly.

Can I get only new or changed listings on a schedule?

Yes. Schedule the actor from the Schedules tab and turn on Incremental mode. Each run then returns only new and updated listings, and unchanged ones are not billed. A quiet run that finds nothing changed still completes normally and simply returns zero rows, it is not an error.

Why did my incremental run return fewer rows than Max listings?

Under incremental mode, Max listings caps how many listings are scanned, not how many are returned. If most of what it scans is unchanged, it can legitimately return far fewer rows than the cap, or zero, on a quiet day.

Why did my run fail instead of returning an empty dataset?

URL mode with no URLs provided, a resumeFromRunId that cannot be resolved to a run or dataset you own, or Incremental mode combined with resumeFromRunId on a search that already has saved state, all stop the run with a clear error message rather than a silent empty result. If the site simply returns no matching listings for your filters, or your connection is not being admitted reliably, the run completes and logs a status message suggesting both possible causes, rather than failing.

Can I use it with AI agents or MCP?

Yes. Call it from any Apify integration or MCP client, and use the connector field to push results into Notion, Linear or Airtable.

๐Ÿ”— Want more leads data?

Pair this actor with these related scrapers from the same team:

๐Ÿ“‡ BizBuySell Scraper
From $1.5/1K. Extract business-for-sale and franchise listings from bizbuysell.com with...
๐Ÿ“‡ BusinessesForSale.com Scraper
From $1.5/1K. Extract businesses and franchises listed for sale on BusinessesForSale.com...
๐Ÿ  Auction.com Scraper
From $1/1K. Extract foreclosure, REO, short-sale, and auction listings from Auction.com...
๐Ÿ“ฑ Clutch Scraper
Scrape Clutch company directories and profiles. Get names, ratings, review counts, hourly...
๐Ÿ  Crexi Scraper
Scrape crexi.com commercial listings: asking price, cap rate, square footage, units, year...
๐Ÿ“‡ HiPages Scraper
Scrape business listings from HiPages Australia by category, location, or URL. Extract...

๐Ÿ‘‰ Browse all abotapi scrapers

๐Ÿ’ฌ Support & custom scrapers

  • ๐Ÿž Found a bug or a missing field? Open a ticket on the Issues tab. We usually reply within hours.
  • ๐Ÿ› ๏ธ Need another site, extra fields or a private build? Email abotapi@proton.me or message Telegram @abotapi.
  • โญ Enjoying it? A quick review on the actor page helps other users find it.