BizBuySell Scraper avatar

BizBuySell Scraper

Pricing

from $1.00 / 1,000 listings

Go to Apify Store
BizBuySell Scraper

BizBuySell Scraper

BizBuySell business-for-sale records with asking price, cash flow, revenue, location, and broker fields. Query by search URL, location, or industry, with optional listing-page fields.

Pricing

from $1.00 / 1,000 listings

Rating

0.0

(0)

Developer

Farhan Ali

Farhan Ali

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

2 days ago

Last modified

Categories

Share

BizBuySell Scraper creates a structured dataset of business-for-sale listings collected from BizBuySell. Each dataset item can include list number, title, URL, location, asking price, cash flow, EBITDA, gross revenue, broker fields, images, and listing flags. Query the source with a BizBuySell search or listing URL, or with location, industry, financial, and keyword filters. Control volume with maxItems, optionally add listing-page fields with scrapeListingDetails, and retrieve records through the Apify Dataset API or export them as JSON, CSV, Excel, XML, or another supported format. The default charge is $0.001 per listing, plus $0.001 for each listing that includes listing-page fields.

Dataset at a glance

PropertyValue
Sourcebizbuysell.com
Record unitOne business-for-sale listing
Input methodsSearch or listing URLs, or location, industry, and financial filters
Main identifierslistNumber, url
DeliveryApify Dataset and API. Run counts are also written to the key-value record run-stats
Export formatsJSON, CSV, Excel, XML, and other Apify dataset exports
Update modelFresh records per Actor run
PricingPay per event. listing $0.001. listing-extra $0.001 when listing-page fields are included

Coverage and available records

A search-result record includes the card fields: list number, title, URL, location, region, asking price, cash flow, EBITDA, gross revenue, listing type, description, images, broker company and name when shown on the card, and flags for real estate, recently added, recently updated, price reduced, and hot property. detailsScraped is false on those records.

When scrapeListingDetails is true, the same row is filled from the listing page. Additional conditional fields include broker phone, employees, facilities, competition, growth and expansion, financing, support and training, reason for selling, franchise, business website, real estate status, building square feet, lease expiration, and rent. The page’s label-value pairs are also stored in detailFields. Financial numbers from the page overwrite the card values when the page has them. detailsScraped is then true, and one listing-extra event is charged for that listing.

startUrls preserves the encoded q filter on a BizBuySell search URL. If you do not pass URLs, location accepts a state, county, or city, and industries accepts the industry labels in the input schema, including parent categories such as Travel and child labels such as Travel > Hotels. Financial filters are integer bounds for gross revenue, cash flow, asking price, and included real estate. daysListedAgo and establishedAfterYear are optional. Keyword and listing-id lists are optional. Boolean flags can hide listings without a price, hide home-based businesses, include relocatable listings, or require seller financing, included real estate, or absentee ownership.

maxItems of 0 means no item cap. The Actor does not return a historical catalog of sold or removed businesses.

Data dictionary

Deduplicate on listNumber. url is the stable listing URL when the list number is missing.

Search-card fields:

FieldTypeNullableDescriptionExample
listNumberintegeryesBizBuySell list number2524127
titlestringyesListing titleProven Hospitality Brokerage & Consulting-Perfect for Licensed Broker
urlstringyesListing URLhttps://www.bizbuysell.com/business-opportunity/proven-hospitality-brokerage-and-consulting-perfect-for-licensed-broker/2524127/
locationstringyesLocation textPalm Desert, CA
regionstringyesRegion code from the cardCA
askingPricenumberyesAsking price as a number299000
cashFlownumberyesCash flow as a number247802
ebitdanumberyesEBITDA as a numbernull
grossRevenuenumberyesGross revenue as a numbernull
listingTypeIdnumberyesListing type id from the card40
descriptionstringyesDescription textCard or page description
imagesarray of stringnoImage URLsBizBuySell image URL
imageUrlstringyesFirst image URLFirst images entry
brokerCompanystringyesBroker company from the cardnull
brokerNamestringyesBroker namenull on some cards
realEstateIncludedbooleanyesReal estate included in the asking pricefalse
recentlyAddedbooleanyesRecently added flagfalse
recentlyUpdatedbooleanyesRecently updated flagtrue
priceReducedbooleanyesPrice reduced flagtrue
hotPropertybooleanyesHot property flagfalse
detailsScrapedbooleannotrue when listing-page fields were mergedfalse

Listing-page fields, present when scrapeListingDetails succeeds:

FieldTypeNullableDescription
brokerPhonestringyesPhone shown on the broker card
employeesstringyesEmployees text
facilitiesstringyesFacilities text
competitionstringyesCompetition text
growthExpansionstringyesGrowth and expansion text
financingstringyesFinancing text
supportTrainingstringyesSupport and training text
reasonForSellingstringyesReason for selling
franchisestringyesFranchise text
businessWebsitestringyesBusiness website
realEstateStatusstringyesReal estate text from the page
buildingSfstringyesBuilding square feet text
leaseExpirationstringyesLease expiration text
rentstringyesRent text
yearEstablishednumber or stringyesYear established when the financial block includes it
detailFieldsobjectyesRemaining label-value pairs from the page

Money fields on the search card are numbers. Some page financial strings are parsed into those same keys. Text fields from the detail page stay strings.

Example dataset record

This is a search-card record from a prior run. scrapeListingDetails was off, so detailsScraped is false and listing-page fields are absent. The description in the saved sample was shortened.

{
"listNumber": 2524127,
"title": "Proven Hospitality Brokerage & Consulting-Perfect for Licensed Broker",
"url": "https://www.bizbuysell.com/business-opportunity/proven-hospitality-brokerage-and-consulting-perfect-for-licensed-broker/2524127/",
"location": "Palm Desert, CA",
"region": "CA",
"askingPrice": 299000,
"cashFlow": 247802,
"ebitda": null,
"grossRevenue": null,
"listingTypeId": 40,
"description": "This long-established hospitality brokerage and consulting business",
"images": [
"https://images.bizbuysell.com/shared/listings/252/2524127/21de0770-526e-43e2-a28d-30f7de6e0739-W336.webp"
],
"imageUrl": "https://images.bizbuysell.com/shared/listings/252/2524127/21de0770-526e-43e2-a28d-30f7de6e0739-W336.webp",
"brokerCompany": null,
"brokerName": null,
"realEstateIncluded": false,
"recentlyAdded": false,
"recentlyUpdated": true,
"priceReduced": true,
"hotProperty": false,
"detailsScraped": false
}

The input that produced this shape was a BizBuySell search URL with scrapeListingDetails false.

Query and input reference

InputTypeRequiredDefaultAccepted valuesDescription
startUrlsarraynononeRequest objects with a BizBuySell URLSearch or listing URLs. Encoded q values are kept
locationstringnononeState, county, or city textUsed when startUrls is not the source
industriesarray of stringnononeIndustry labels in the input schema enumParent or child industries
grossRevenueMinintegernononeIntegerMinimum gross revenue
grossRevenueMaxintegernononeIntegerMaximum gross revenue
cashFlowMinintegernononeIntegerMinimum cash flow
cashFlowMaxintegernononeIntegerMaximum cash flow
askingPriceMinintegernononeIntegerMinimum asking price
askingPriceMaxintegernononeIntegerMaximum asking price
realEstateMinintegernononeIntegerMinimum included real estate value
realEstateMaxintegernononeIntegerMaximum included real estate value
daysListedAgointegernononeIntegerListed within this many days
establishedAfterYearintegernononeIntegerEstablished after this year
keywordstringnononeTextKeyword filter
listingIdsarraynononeListing id stringsSpecific listings
hideListingsWithoutPricebooleannofalsetrue, falseDrop listings with no price
hideHomeBasedBusinessesbooleannofalsetrue, falseDrop home-based businesses
includeRelocatableListingsbooleannofalsetrue, falseInclude relocatable listings
mustHaveSellerFinancingbooleannofalsetrue, falseRequire seller financing
mustHaveRealEstateIncludedbooleannofalsetrue, falseRequire included real estate
mustAllowAbsenteeOwnerbooleannofalsetrue, falseRequire absentee ownership
scrapeListingDetailsbooleannofalsetrue, falseMerge listing-page fields and charge listing-extra
maxItemsintegerno00 or moreItem cap. 0 means no cap
proxyConfigurationobjectnoApify residential proxy, country USApify proxy objectProxy selection

Minimal request:

{
"location": "California",
"maxItems": 25
}

Advanced request:

{
"startUrls": [
{
"url": "https://www.bizbuysell.com/california/travel-businesses-for-sale/"
}
],
"askingPriceMax": 1000000,
"scrapeListingDetails": true,
"maxItems": 50,
"proxyConfiguration": {
"useApifyProxy": true,
"apifyProxyGroups": ["RESIDENTIAL"],
"apifyProxyCountry": "US"
}
}

Retrieve the data through the API

  1. Start datascrapers/bizbuysell-scraper with the JSON input.
  2. Wait until the run finishes.
  3. Read items from the run’s default dataset.
  4. Read run-stats from the default key-value store for record counts and timestamps.
curl "https://api.apify.com/v2/acts/datascrapers~bizbuysell-scraper/runs?token=$APIFY_TOKEN" \
-H "Content-Type: application/json" \
-d '{"location":"California","maxItems":25}'
$curl "https://api.apify.com/v2/datasets/$DATASET_ID/items?clean=true&format=json&token=$APIFY_TOKEN"

Other languages are on the Actor’s API tab: https://apify.com/datascrapers/bizbuysell-scraper

Data quality and record handling

Financial fields are null when BizBuySell does not show them. Broker name and company are often null on the search card and may appear only after scrapeListingDetails. detailFields is a map of page labels and is conditional.

The Actor does not deduplicate across runs. Use listNumber. maxItems of 0 does not cap the run. A failed listing page leaves the card record and does not set detailsScraped to true. There is no historical snapshot unless you store the dataset.

The default proxy is Apify residential with country US.

run-stats includes recordsScraped, listingDetailsScraped, scrapeListingDetails, runStartedAt, runFinishedAt, and maxItems.

Export and pipeline examples

DestinationRecommended methodTypical use
PostgreSQL or SupabaseDataset API or a webhook consumerUpsert businesses on listNumber
Google SheetsApify integrationReview asking price and cash flow
S3 or other cloud storageScheduled dataset exportArchive one file per run
CRMWebhook consumerSend broker and listing URL fields downstream

Pricing and cost examples

Billing is pay per event. The same prices apply to Free, Bronze, Silver, Gold, Platinum, and Diamond.

EventPrice on every planWhen it is charged
listing$0.001One business record. This is the primary event
listing-extra$0.001Once when listing-page fields are merged for that record
RecordsListing-page fieldsEstimated event cost
1,000off$1.00
1,000on for every record$2.00
10,000off$10.00

These are the default prices set for this account. They are placeholders and can be changed in the Actor pricing settings. Estimates do not include Apify platform usage, which is billed to the user in addition to event charges.

Limitations and responsible data use

The Actor returns publicly available BizBuySell listing fields for the URLs or filters you submit. It does not guarantee every industry, state, or removed listing. Financials and broker contact values are missing on many cards. Listing-page text can change when the site changes.

Each run is a current snapshot. You are responsible for complying with privacy, contractual, and legal requirements for the records you collect and store.

Dataset questions

What does one dataset item represent?

One BizBuySell business-for-sale listing. With scrapeListingDetails enabled, the same item also carries listing-page fields.

Which field should I use as a unique identifier?

Use listNumber. Fall back to url if the list number is null.

Are fields nullable or conditional?

Yes. Price, cash flow, revenue, EBITDA, and broker fields are null when the page does not show them. Listing-page keys exist when detailsScraped is true.

Can I retrieve the records as CSV or JSON?

Yes. Export the default dataset, or call the Dataset API. Counts for the run are in the run-stats key-value record.

How do I paginate large datasets?

Set maxItems above 0 to cap a run, or leave it at 0 for no cap. Page the dataset afterward with offset and limit.

Does the Actor return historical data?

No. Each run returns the listings available for that query at run time.

What counts as a billable result?

Each listing charges one listing event at $0.001. Each listing that receives listing-page fields also charges one listing-extra event at $0.001. Platform usage is separate.

Data Scrapers support

Need an additional field, record type, or export workflow? Contact Data Scrapers at stardustspotlight@gmail.com. Include a sample source URL, required fields, expected record volume, and preferred delivery format.