# BizQuest Scraper - Business Listings & Price Monitor (`benthepythondev/bizquest-scraper`) Actor

Extract public BizQuest businesses for sale, asking prices and locations. Monitor newly observed listings and asking-price changes.

- **URL**: https://apify.com/benthepythondev/bizquest-scraper.md
- **Developed by:** [Ben](https://apify.com/benthepythondev) (community)
- **Categories:** Business, Lead generation, Automation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $3.50 / 1,000 listings

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.
Actors are written with capital "A".

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.
The best way to integrate Actors is as follows.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).

# README

## BizQuest Scraper and Business Listing Price Monitor

Export public BizQuest businesses for sale with their advertised asking prices, locations, descriptions and original listing links. Save a search as a monitor to receive newly observed businesses and asking-price changes on later runs. Export to JSON/CSV/Excel, run on a schedule, call via API, or connect to Make, Zapier or n8n.

### What is the BizQuest Scraper?

This Actor turns the visible cards on a public BizQuest search page into structured records. It supports regional and category searches, follows the site's result pagination, and deduplicates repeated listings within a run. It is intended for acquisition research, buyer shortlists and ongoing market observation.

Search cards can contain financial information that asks visitors to sign in. This Actor does not collect those fields. It exports the public asking price and description and indicates when a card contains a sign-in prompt. It does not substitute an estimate for cash flow, EBITDA or seller income.

#### What data does it extract?

- **Listing identity:** BizQuest listing ID, public title and canonical business-for-sale URL.
- **Asking price:** a numeric USD value when the visible price is a single dollar amount, together with the original price text.
- **Location and description:** the place printed on the card and its public summary.
- **Public card details:** a financing-available flag, an image URL when supplied, and a flag identifying sign-in-only financial details.
- **Observation metadata:** source, search-page URL and a UTC observation timestamp.

Monitoring adds `change_type`, `previous_price`, `monitor_id` and `detected_at` to exported changes. These fields describe differences between your successful observations. They do not establish when a seller first published the business or why an asking price changed.

### Input

| Field | Purpose | Default |
|---|---|---|
| `searchUrl` | Public BizQuest regional or category search URL | Texas businesses for sale |
| `maxResults` | Maximum unique listings to collect, from 1 to 1,000 | 10 |
| `onlyChanges` | Enable persistent new-listing and change detection | false |
| `monitorId` | Identifier for one recurring search | Derived from the search input |
| `emitInitial` | Export a new monitor's baseline | true |
| `resetMonitor` | Replace only the selected baseline after a successful run | false |

#### Example input

```json
{
  "searchUrl": "https://www.bizquest.com/businesses-for-sale-in-texas-tx/",
  "maxResults": 10,
  "onlyChanges": true,
  "monitorId": "texas-business-watch",
  "emitInitial": true
}
```

Use the public search URL for the region or business category you want to inspect. A direct business-detail URL is not accepted. The Actor follows matching pagination links and retains search query parameters when the next-page link omits them. It does not open sign-in, messaging or contact forms.

`maxResults` bounds the collected snapshot. A monitor can export fewer rows because it suppresses records whose tracked fields have not changed. Source promotions can repeat businesses across pages; those repeated IDs are exported only once per run.

### Output

This public business card was observed during development on September 9, 2026. The example shows a subset of the returned fields; its price or availability may subsequently change.

```json
{
  "listing_id": "2550992",
  "title": "Established Infrastructure-Focused Architectural Firm",
  "url": "https://www.bizquest.com/business-for-sale/established-infrastructure-focused-architectural-firm/BW2550992/",
  "price": 1661000.0,
  "price_text": "$1,661,000",
  "currency": "USD",
  "price_period": "asking_price",
  "location": "Houston, TX",
  "financial_details_require_login": true,
  "source": "bizquest"
}
```

Open **Output → Overview** after a run to inspect the main columns. Export all fields for the public description, images and observation metadata. The original source link lets you check a listing before relying on it in a purchase process.

The numeric `price` is null when the card displays something other than a single dollar amount, such as “Price on request.” In that case, retain `price_text`; a missing numeric price must not be treated as zero. Currency is also null when a supported dollar price cannot be established from the card.

The default key-value store contains a `SUMMARY` record showing how many unique listings were collected and how many rows were exported. Source failures or unrecognized page layouts fail the run. A page is accepted as an empty search only when it explicitly indicates that no matching businesses were found.

### Schedule new-listing and price-change monitoring

Save the input as an Apify Task and set `onlyChanges: true`. Pick a `monitorId` for that search, then schedule sequential runs. A daily schedule is a useful starting point for a buyer shortlist; select a frequency that fits your own research needs and source usage obligations.

The first successful monitor run establishes a baseline. With `emitInitial: true`, those listings are exported as `new`. With `emitInitial: false`, the baseline is saved without exporting its rows. Later runs export newly observed IDs, changed prices and changes to the tracked title or location. An unchanged listing produces no result row.

State belongs to the Apify account running the Actor. Each monitor remembers up to 5,000 listings for 90 days. Returning listings can be considered new again after their state expires. An automatic monitor ID depends on the search input; use a separate explicit ID when you want a stable name for a particular Task.

Keep one active run per monitor. The named key-value store is a simple persistent baseline, not a transaction queue for overlapping runs. Resetting a monitor replaces only its own state after a successful run. Disable `resetMonitor` for subsequent scheduled runs, or every run will establish another baseline.

### What monitoring can and cannot tell you

A `new` event means “not previously observed within this monitor's retained state.” A business may have been listed for a long time before it entered your result window. Featured placements, changed ranking and newly matching filters can all affect which cards are collected.

The Actor does not mark missing results as sold or withdrawn. It also cannot report a change to a listing that is outside the bounded snapshot. Increasing `maxResults` expands coverage, with a corresponding increase in potential output charges. For delivery systems, deduplicate on `listing_id` and the observation event because a failed run may leave some rows in its dataset before a retry.

### Pricing

The base result price is **$0.005 per exported listing or change**, or $5 per 1,000 results. The base start event costs $0.00005 per run per allocated GB, with a minimum of one event. At 512 MB, ten exported rows have a base event charge of $0.05005. Higher Store tiers receive progressive discounts; check the Pricing tab for the applicable tier and platform usage terms.

Unchanged records and seed-only baselines are not exported, so they do not incur result-event charges. The start event and any applicable platform costs still apply. Use Apify's maximum charge setting to add a spending bound. Unexported changes are not marked as delivered when that budget is exhausted.

### Use cases

- Maintain a source-linked acquisition shortlist for a region or industry.
- Compare asking prices across a selected set of business listings.
- Detect asking-price changes in a saved search over time.
- Export public opportunities into an internal spreadsheet or research dashboard.

### FAQ

**Does this include cash flow, EBITDA or private broker contacts?** No. It exports visible search-card fields and identifies sign-in prompts. It does not access gated financial details.

**Do I need a BizQuest account?** No account is required for the public searches this Actor supports.

**Does the price include property, equipment or inventory?** The Actor preserves the advertised asking price. Read the source listing for included assets and transaction terms.

**Can I search outside Texas?** Yes. Replace `searchUrl` with another public BizQuest regional or category search URL.

**Can I export every business on the site?** Each run is bounded to 1,000 collected listings, and the source can change ordering during pagination. This is a bounded observation rather than a guaranteed full-site dataset.

**Why are there no monitor results?** The baseline may have been seeded without export, no tracked changes may have occurred, or the search may have no results. Inspect `SUMMARY` and the run log.

**Can I run this through an API?** Yes. Use the Actor's API tab for your account's authenticated example. The same JSON input works for a direct Actor run and a saved Task.

**Is it legal to use this data?** Apply the source terms and laws relevant to your use. Public availability does not grant unrestricted reuse or permission for bulk outreach. GDPR, CAN-SPAM and other privacy or communications requirements can apply downstream.

**How do I get help?** Open an issue with your run URL, input and expected output. An honest review after a useful successful run helps other users assess the Actor; no incentive is offered.

### Related Actors

Explore [BusinessesForSale Scraper](https://apify.com/benthepythondev/businessesforsale-scraper), [Flippa Scraper](https://apify.com/benthepythondev/flippa-scraper), or [Empire Flippers Scraper](https://apify.com/benthepythondev/empireflippers-scraper) for other public acquisition research sources.

**Keywords:** BizQuest scraper, businesses for sale data, business asking prices, business acquisition research, BizQuest CSV, business listing API, price change monitor, acquisition shortlist, Texas businesses for sale, business marketplace data, scheduled business scraper, public business listings, franchise research, business sale monitoring, business listing export.

# Actor input Schema

## `searchUrl` (type: `string`):

Public regional or category search URL. Detail pages and login-only fields are excluded.

## `maxResults` (type: `integer`):

Maximum unique source listings inspected per run; a monitor may export fewer.

## `onlyChanges` (type: `boolean`):

Persist a baseline in your own account; export new observations and tracked changes.

## `monitorId` (type: `string`):

Reuse for one search. Leave blank to derive it from the search. Avoid concurrent runs.

## `emitInitial` (type: `boolean`):

Disable to seed a new monitor without exporting its baseline rows.

## `resetMonitor` (type: `boolean`):

Requires onlyChanges. Replaces only this baseline after a successful run; disable for later scheduled runs.

## Actor input object example

```json
{
  "searchUrl": "https://www.bizquest.com/businesses-for-sale-in-texas-tx/",
  "maxResults": 10,
  "onlyChanges": false,
  "emitInitial": true,
  "resetMonitor": false
}
```

# Actor output Schema

## `results` (type: `string`):

No description

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "searchUrl": "https://www.bizquest.com/businesses-for-sale-in-texas-tx/",
    "maxResults": 10
};

// Run the Actor and wait for it to finish
const run = await client.actor("benthepythondev/bizquest-scraper").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {
    "searchUrl": "https://www.bizquest.com/businesses-for-sale-in-texas-tx/",
    "maxResults": 10,
}

# Run the Actor and wait for it to finish
run = client.actor("benthepythondev/bizquest-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "searchUrl": "https://www.bizquest.com/businesses-for-sale-in-texas-tx/",
  "maxResults": 10
}' |
apify call benthepythondev/bizquest-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,benthepythondev/bizquest-scraper"
        }
    }
}

```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/gWFNVhfEjmWzhbHvL/builds/bNyrB1eoMtPxWCrrK/openapi.json
