BizBuySell Scraper
Pricing
from $1.00 / 1,000 listings
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
Maintained by CommunityActor 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
| Property | Value |
|---|---|
| Source | bizbuysell.com |
| Record unit | One business-for-sale listing |
| Input methods | Search or listing URLs, or location, industry, and financial filters |
| Main identifiers | listNumber, url |
| Delivery | Apify Dataset and API. Run counts are also written to the key-value record run-stats |
| Export formats | JSON, CSV, Excel, XML, and other Apify dataset exports |
| Update model | Fresh records per Actor run |
| Pricing | Pay 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:
| Field | Type | Nullable | Description | Example |
|---|---|---|---|---|
| listNumber | integer | yes | BizBuySell list number | 2524127 |
| title | string | yes | Listing title | Proven Hospitality Brokerage & Consulting-Perfect for Licensed Broker |
| url | string | yes | Listing URL | https://www.bizbuysell.com/business-opportunity/proven-hospitality-brokerage-and-consulting-perfect-for-licensed-broker/2524127/ |
| location | string | yes | Location text | Palm Desert, CA |
| region | string | yes | Region code from the card | CA |
| askingPrice | number | yes | Asking price as a number | 299000 |
| cashFlow | number | yes | Cash flow as a number | 247802 |
| ebitda | number | yes | EBITDA as a number | null |
| grossRevenue | number | yes | Gross revenue as a number | null |
| listingTypeId | number | yes | Listing type id from the card | 40 |
| description | string | yes | Description text | Card or page description |
| images | array of string | no | Image URLs | BizBuySell image URL |
| imageUrl | string | yes | First image URL | First images entry |
| brokerCompany | string | yes | Broker company from the card | null |
| brokerName | string | yes | Broker name | null on some cards |
| realEstateIncluded | boolean | yes | Real estate included in the asking price | false |
| recentlyAdded | boolean | yes | Recently added flag | false |
| recentlyUpdated | boolean | yes | Recently updated flag | true |
| priceReduced | boolean | yes | Price reduced flag | true |
| hotProperty | boolean | yes | Hot property flag | false |
| detailsScraped | boolean | no | true when listing-page fields were merged | false |
Listing-page fields, present when scrapeListingDetails succeeds:
| Field | Type | Nullable | Description |
|---|---|---|---|
| brokerPhone | string | yes | Phone shown on the broker card |
| employees | string | yes | Employees text |
| facilities | string | yes | Facilities text |
| competition | string | yes | Competition text |
| growthExpansion | string | yes | Growth and expansion text |
| financing | string | yes | Financing text |
| supportTraining | string | yes | Support and training text |
| reasonForSelling | string | yes | Reason for selling |
| franchise | string | yes | Franchise text |
| businessWebsite | string | yes | Business website |
| realEstateStatus | string | yes | Real estate text from the page |
| buildingSf | string | yes | Building square feet text |
| leaseExpiration | string | yes | Lease expiration text |
| rent | string | yes | Rent text |
| yearEstablished | number or string | yes | Year established when the financial block includes it |
| detailFields | object | yes | Remaining 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
| Input | Type | Required | Default | Accepted values | Description |
|---|---|---|---|---|---|
| startUrls | array | no | none | Request objects with a BizBuySell URL | Search or listing URLs. Encoded q values are kept |
| location | string | no | none | State, county, or city text | Used when startUrls is not the source |
| industries | array of string | no | none | Industry labels in the input schema enum | Parent or child industries |
| grossRevenueMin | integer | no | none | Integer | Minimum gross revenue |
| grossRevenueMax | integer | no | none | Integer | Maximum gross revenue |
| cashFlowMin | integer | no | none | Integer | Minimum cash flow |
| cashFlowMax | integer | no | none | Integer | Maximum cash flow |
| askingPriceMin | integer | no | none | Integer | Minimum asking price |
| askingPriceMax | integer | no | none | Integer | Maximum asking price |
| realEstateMin | integer | no | none | Integer | Minimum included real estate value |
| realEstateMax | integer | no | none | Integer | Maximum included real estate value |
| daysListedAgo | integer | no | none | Integer | Listed within this many days |
| establishedAfterYear | integer | no | none | Integer | Established after this year |
| keyword | string | no | none | Text | Keyword filter |
| listingIds | array | no | none | Listing id strings | Specific listings |
| hideListingsWithoutPrice | boolean | no | false | true, false | Drop listings with no price |
| hideHomeBasedBusinesses | boolean | no | false | true, false | Drop home-based businesses |
| includeRelocatableListings | boolean | no | false | true, false | Include relocatable listings |
| mustHaveSellerFinancing | boolean | no | false | true, false | Require seller financing |
| mustHaveRealEstateIncluded | boolean | no | false | true, false | Require included real estate |
| mustAllowAbsenteeOwner | boolean | no | false | true, false | Require absentee ownership |
| scrapeListingDetails | boolean | no | false | true, false | Merge listing-page fields and charge listing-extra |
| maxItems | integer | no | 0 | 0 or more | Item cap. 0 means no cap |
| proxyConfiguration | object | no | Apify residential proxy, country US | Apify proxy object | Proxy 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
- Start
datascrapers/bizbuysell-scraperwith the JSON input. - Wait until the run finishes.
- Read items from the run’s default dataset.
- Read
run-statsfrom 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
| Destination | Recommended method | Typical use |
|---|---|---|
| PostgreSQL or Supabase | Dataset API or a webhook consumer | Upsert businesses on listNumber |
| Google Sheets | Apify integration | Review asking price and cash flow |
| S3 or other cloud storage | Scheduled dataset export | Archive one file per run |
| CRM | Webhook consumer | Send 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.
| Event | Price on every plan | When it is charged |
|---|---|---|
| listing | $0.001 | One business record. This is the primary event |
| listing-extra | $0.001 | Once when listing-page fields are merged for that record |
| Records | Listing-page fields | Estimated event cost |
|---|---|---|
| 1,000 | off | $1.00 |
| 1,000 | on for every record | $2.00 |
| 10,000 | off | $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.
Related datasets from Data Scrapers
- Clutch Scraper covers agency profiles that can be joined to a business name or website.
- Europages Scraper covers European company listings for a broader company dataset.
- LinkedIn Company Scraper covers company profile fields that can be matched on company name.
- Glassdoor Jobs Scraper covers employer and job records when the workflow includes hiring data.
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.