# State Bids Scraper: COMMBUYS, BidBuy, NJSTART, OregonBuys (`chimey_forearm/state-bids-scraper`) Actor

State government bids & RFP scraper: open bids from Illinois BidBuy, COMMBUYS, NJSTART, OregonBuys and NevadaEPro with deadline, buyer contact, NIGP codes. No login. Export data, run via API, schedule and monitor runs, or integrate with other tools.

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

## Pricing

from $2.00 / 1,000 bids

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

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

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
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.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## 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.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

## State Bids Scraper: COMMBUYS, BidBuy, NJSTART, OregonBuys

> The only Apify Store Actor for **Illinois BidBuy** and **NevadaEPro** (Store search on Oct 19, 2026), plus COMMBUYS, NJSTART and OregonBuys in the same run. **$2 per 1,000 bids, details included.** Filter by **NIGP / UNSPSC code** and get **only new bids** on a schedule.

![State Bids Scraper output table: NevadaEPro bids with agency, title, bid number, due date, buyer and contact email](https://api.apify.com/v2/key-value-stores/ZA74NSNlX7nM76ZW5/records/state-output.png)

| What you can extract | Features & integrations |
|---|---|
| 📄 **Bid basics**: title, bid number, status, posted date | **5 state portals**: COMMBUYS, BidBuy, NJSTART, OregonBuys, NevadaEPro |
| ⏰ **Deadline**: due date and time | **Filters**: keywords, commodity codes, due within, posted within |
| 🏛️ **Agency & buyer**: the organization and buyer name | **Only new bids**: plus new-amendment alerts |
| 📞 **Contact email & phone**: as published by the state portal | **Scheduling**: run it hourly, daily or weekly with Apify schedules |
| 🏷️ **NIGP / UNSPSC codes**: category codes per bid | **Export anywhere**: JSON, CSV, Excel, XML or HTML from the dataset |
| 📦 **Line items**: item number, code and description | **API & SDKs**: Apify REST API plus JavaScript and Python clients |
| 📎 **Attachments & amendments**: links and amendment history | **Webhooks & integrations**: Zapier, Make, Slack, Google Drive and more |
| 📅 **Contract dates**: contract begin and end dates | **AI agents (MCP)**: call it from Claude or other agents via Apify's MCP server |

**Free sample:** [53 open Massachusetts government bids (+ a few CT/NY) for HVAC, roofing, janitorial, IT and landscaping](https://mohabaha0.gumroad.com/l/open-gov-bids-sample), most of them from COMMBUYS via this Actor. Run it yourself for your own states and get new bids on a schedule.

**Try it free in 1 click:** open this [ready-made example](https://apify.com/chimey_forearm/state-bids-scraper/examples/it-and-software-bids-from-illinois-new-jersey-and-nevada) and press Start. Apify's free plan includes $5 of usage every month, no credit card needed. The Input example below returned 10 records and costs about $0.02 at list price.

### What does State Bids Scraper do?

- **State government bids scraper** for five official state e-procurement portals: **Illinois BidBuy**, **Massachusetts COMMBUYS** (state agencies plus cities, towns, schools and authorities), **New Jersey NJSTART**, **OregonBuys** and **Nevada NevadaEPro**.
- Pulls every **open bid, RFP, RFQ and invitation for bid** with its **deadline**, **agency**, **buyer** and **published contact email and phone**.
- Adds **NIGP / UNSPSC category codes**, **line items**, **attachment links**, **amendments** and **contract dates** from each bid's detail page.
- **Bid alerts**: only-new mode returns just the bids you have not received yet, plus optional **new-amendment alerts**.
- **No login, no browser, no proxies.** About 1,300 open bids across the five portals on Oct 18, 2026 (COMMBUYS 894, BidBuy 194, OregonBuys 170, NevadaEPro 38, NJSTART 22).
- **An alternative to a paid bid-subscription service** for these five public state portals: you pay only per bid delivered, and there is no monthly plan.

#### What makes it different

- **Illinois BidBuy and NevadaEPro are not covered by any other Store Actor** (Store search on Oct 19, 2026). The one other multi-state Actor covering COMMBUYS, NJSTART and OregonBuys charges $15 per 1,000 bids; this one is **$2 per 1,000, details included**.
- **Filter by NIGP / UNSPSC commodity code**, the way vendors register for bids. `920` keeps every NIGP 920 IT-services bid, `958-85` one class. Each bid also lists its line items with code and description.
- **Bid alert feed: only new bids, plus optional new-amendment alerts.** With `onlyNew` on, each run returns only bids you have not received yet. With `alertOnNewAmendments`, a bid you already have comes back once with `changeType: "new_amendment"` when the state posts an amendment.
- **Official state sources, polite by design.** The open-bid list comes from each portal's own CSV export (one request per state). Detail pages are paced under 90 requests per 5 minutes.

### Output fields at a glance

| | | |
|---|---|---|
| 📄 `title`: what is being bought | 🔢 `bidNumber`: solicitation number | 🗺️ `state` / `portal`: where it was posted |
| 🏛️ `organization`: the agency | 👤 `buyer`: purchaser name | 📞 `infoContact`: contact name, email, phone as published |
| ⏰ `dueAt`: deadline (UTC) | 🕑 `dueAtLocal`: deadline as shown on the portal | ⏳ `daysUntilDue`: days left |
| 📅 `postedAt`: when it was made available | 🏷️ `categoryCodes`: NIGP / UNSPSC codes | 📦 `items`: line items with code and description |
| 📎 `attachments`: file names and links | 📝 `amendments`: number, date and note | 🧾 `contractBeginDate` / `contractEndDate`: contract dates |
| 📍 `shipToAddress` / `billToAddress`: agency addresses | 🧩 `otherFields`: state-specific fields | 🔔 `changeType`: `new` / `new_amendment` in only-new mode |

### How to use State Bids Scraper in 5 steps

1. Create a free [Apify account](https://console.apify.com/sign-up).
2. Open [State Bids Scraper](https://apify.com/chimey_forearm/state-bids-scraper).
3. Add your input: pick states (or leave empty for all five), then keywords, agency names or NIGP codes to keep the list focused.
4. Click **Start**. Results appear in the **Bids** table.
5. Download the results as JSON, CSV or Excel, or pull them through the API. For alerts, turn on **Only new bids** and add a daily schedule.

### Input

This input was run on the Apify platform on Oct 19, 2026 (256 MB): 10 Nevada bids with full details in about 8 seconds.

```json
{ "states": ["NV"], "maxBidsPerState": 10 }
```

| Field | What it does |
|---|---|
| `states` | `IL`, `MA`, `NJ`, `OR`, `NV`. Empty = all five. |
| `keywords` | Keep bids whose title, bid number or alternate ID contains any of these (word start, case-insensitive). |
| `searchFullText` | Also match keywords in the bulletin description and line items (reads every bid's detail page). |
| `excludeKeywords` | Drop bids whose title contains any of these, e.g. `farm lease`, `change order notice`. |
| `organizationContains` | Keep only these agencies, e.g. `transportation`, `city of`. |
| `categoryCodes` | NIGP / UNSPSC code prefixes, e.g. `920`, `208-11`. COMMBUYS uses its own codes such as `81-11`. |
| `dueWithinDays` / `postedWithinDays` | Deadline in the next N days / posted in the last N days. |
| `includeDetails` | Detail page per bid (on by default). Same price either way. |
| `onlyNew`, `alertOnNewAmendments`, `stateKey` | Bid alert mode and its memory name. |
| `bidUrls` | Single bid links from any of the five portals. |
| `maxBidsPerState` | Soonest deadline first. |

#### More tested examples

All three ran on the Apify platform on Oct 18–19, 2026.

**1. Software, cloud, network and data bids in Illinois and Massachusetts** (the prefilled input)

```json
{ "states": ["IL", "MA"], "keywords": ["software", "cloud", "network", "data"] }
```

1,088 open bids checked, 17 matched (7 Illinois, 10 Massachusetts), each with details, in 39 s. Cost: 17 bids = $0.034.

**2. IT bids by NIGP code in Illinois, New Jersey and Nevada**

```json
{ "states": ["IL", "NJ", "NV"], "categoryCodes": ["920", "208", "209"] }
```

254 open bids checked (every detail page read, paced politely), 21 IT bids matched: 11 Illinois (e.g. ERP Production Support RFP, CMMS RFP), 6 New Jersey (e.g. NJ Labor Tax Integrated Solution), 4 Nevada (e.g. Customer Portal & AMI Technology). Two Illinois bids needed a vendor login and were reported in one `DETAILS_UNAVAILABLE` record. 10.6 minutes, 63 MB. Cost: 22 records = $0.044.

**3. Daily alert for new Massachusetts construction bids**

```json
{ "states": ["MA"], "keywords": ["construction", "roof", "paving", "hvac", "renovation"], "onlyNew": true, "alertOnNewAmendments": true }
```

First run: 52 bids. Second run right after: 0 bids (nothing new, nothing charged but the start). When a remembered bid gained an amendment, the next run returned just that bid with `changeType: "new_amendment"`.

Ready-made example Tasks: [IT and software bids from Illinois, New Jersey and Nevada](https://apify.com/chimey_forearm/state-bids-scraper/examples/it-and-software-bids-from-illinois-new-jersey-and-nevada), [Daily alert for new Massachusetts construction bids](https://apify.com/chimey_forearm/state-bids-scraper/examples/daily-alert-for-new-massachusetts-construction-bids), [Oregon and Nevada state bids due in the next 14 days](https://apify.com/chimey_forearm/state-bids-scraper/examples/oregon-and-nevada-state-bids-due-in-the-next-14-days).

### Output

A real record from the run above (NevadaEPro, Oct 19, 2026), trimmed: some fields and two of three attachments left out.

```json
{
  "type": "bid",
  "state": "NV",
  "portal": "NevadaEPro",
  "bidNumber": "80DOT-S4026",
  "title": "3M Reflectors",
  "organization": "Department of Transportation",
  "buyer": "Jennifer Thomas",
  "dueAt": "2026-10-23T21:00:00.000Z",
  "dueAtLocal": "10/23/2026 2:00 PM",
  "timezone": "America/Los_Angeles",
  "daysUntilDue": 3,
  "portalStatus": "Sent",
  "url": "https://nevadaepro.com/bso/external/bidDetail.sda?docId=80DOT-S4026&external=true&parentUrl=close",
  "postedAtLocal": "09/23/2026 02:30:27 PM",
  "department": "800 - Department of Transportation",
  "bidType": "OPEN",
  "purchaseMethod": "Open Market",
  "bulletinDescription": "The State of Nevada Purchasing Division on behalf of the Department of Transportation is looking for vendors who can provide pricing for 3M Reflectors. Please see the items tab for more information.",
  "infoContact": { "name": "Jennifer Thomas", "email": "jennthomas@admin.nv.gov", "phone": null, "raw": "Jennifer Thomas - jennthomas@admin.nv.gov" },
  "categoryCodes": ["550-08"],
  "items": [
    { "itemNumber": 1, "code": "550-08", "description": "3M Reflectors RPM-290-WR Two Way White",
      "nigpCodes": [{ "code": "550-08", "description": "Buttons, Delineators, Reflectors, etc., Reflectorized" }], "additionalCodes": [] }
  ],
  "attachmentCount": 3,
  "attachments": [
    { "name": "Quote Instructions", "url": "https://nevadaepro.com/bso/external/bidDetail.sda?docId=80DOT-S4026&downloadFileNbr=19837&external=true&fn=Quote%20Instructions&mode=download&parentUrl=close" }
  ],
  "amendmentCount": 1,
  "otherFields": {
    "Procurement type": "Goods (commodities, supplies, materials, or equipment)",
    "One-time or on-going purchase": "One-Time"
  },
  "changeType": null
}
```

| Field | Description |
|---|---|
| `state`, `portal` | Two-letter state and portal name |
| `bidNumber`, `alternateId`, `blanketNumber` | Solicitation number and the state's other IDs |
| `title`, `organization`, `department`, `location` | What is being bought, and by whom |
| `buyer`, `infoContact` | Purchaser name; contact name, email and phone as published by the state |
| `dueAt`, `dueAtLocal`, `timezone`, `daysUntilDue` | Bid opening (deadline) in UTC and as shown on the portal |
| `postedAt` | When the bid was made available |
| `typeCode`, `bidType`, `purchaseMethod`, `informalBid` | Solicitation type as the state labels it |
| `preBidConference`, `bulletinDescription` | Pre-bid meeting notes and summary |
| `categoryCodes`, `items[]` | NIGP / UNSPSC codes and each line item with its code and description |
| `attachments[]`, `attachmentCount` | File names with download links on the state portal |
| `amendments[]`, `amendmentCount`, `latestAmendmentAt` | Amendment number, date and note |
| `contractBeginDate`, `contractEndDate`, `requiredDate` | Contract dates where given |
| `shipToAddress`, `billToAddress` | Agency addresses |
| `otherFields` | State-specific fields, e.g. NJ small-business set-aside and bond requirements, MA SBPP eligibility, NV contract type |
| `changeType`, `matchedKeywords` | `new` / `new_amendment` in only-new mode; which keywords matched |
| `url` | Public bid page |

A `RUN_SUMMARY` record in the key-value store has counts per state.

### How can I use the data?

- **Win more state contracts**: one daily list of open bids in your NIGP codes instead of five portal logins.
- **Reach the buyer early**: the published contact email and phone are in each record.
- **Never miss an amendment**: only-new mode with amendment alerts re-sends a bid once when the state changes it.
- **Bid-alert services and govtech sales teams**: route or resell opportunities by state, agency or commodity code.
- **Research and journalism**: track what state agencies are buying and when.

### More Actors from the same developer

| Actor | What it does |
|---|---|
| [Telegram Channel Scraper](https://apify.com/chimey_forearm/telegram-channel-scraper) | Public Telegram channel posts with a keyword monitor and only-new mode |
| [Substack Scraper](https://apify.com/chimey_forearm/substack-to-markdown) | Substack newsletters to clean Markdown, plus podcast transcripts |
| [Greenhouse & Workday Jobs Scraper](https://apify.com/chimey_forearm/ats-jobs-scraper) | Jobs from 8 career-site platforms with visa sponsorship and clearance flags |
| [App Store & Google Play Reviews Scraper](https://apify.com/chimey_forearm/app-reviews-scraper) | Reviews from both stores in one run, only new reviews on schedules |
| [Website to Markdown Crawler](https://apify.com/chimey_forearm/sitemap-to-markdown) | Any website to Markdown for RAG, with incremental sync and llms.txt |
| [Government Bids & RFP Scraper](https://apify.com/chimey_forearm/opengov-bids-scraper) | Open bids and RFPs from 500+ US city and county portals on OpenGov |
| [PERM Green Card Sponsors](https://apify.com/chimey_forearm/perm-green-card-sponsors) | Companies that sponsor green cards, from official DOL PERM data |

### Error items

Errors are pushed to the dataset as their own records, so you always see what went wrong. Each one has `type: "error"`, `input` (the state or URL it is about), `error` (the code), `errorMessage` and `scrapedAt`; per-state errors also carry `state` and `portal`.

| `error` | When it happens |
|---|---|
| `UNSUPPORTED_STATE` | A state code other than `IL`, `MA`, `NJ`, `OR`, `NV`. If no supported state or bid link is left, the run ends right away with a clear status message (still Succeeded) |
| `INVALID_INPUT` | A bid link that is not a URL, or not from one of the five portals with a `docId` |
| `BID_NOT_FOUND` | A bid link whose bid was not found or is not public |
| `PORTAL_UNAVAILABLE` | A state's open-bid list could not be loaded (usually temporary) |
| `FETCH_FAILED` | A bid link could not be loaded, or an unexpected error for a state |
| `DETAILS_UNAVAILABLE` | Some bids could not be checked against a code / posted-date / full-text filter because their detail page did not load; has `uncheckedBids` |
| `RATE_LIMITED` | Same as above, but because the portal rate limited detail pages; has `uncheckedBids` |

When a bid's detail page fails and no detail-only filter is on, the bid still comes back from the list with a `detailsError` field instead of an error record. Error records are charged like bids.

### Limitations

- **Open bids only.** Closed, awarded and historical bids are not collected.
- **Five states.** Georgia, Maryland, Virginia and Texas run on other systems and are not included.
- **Detail-based filters are slower.** `categoryCodes`, `postedWithinDays` and `searchFullText` read every candidate bid's detail page, paced at 90 per 5 minutes, so a full COMMBUYS code scan (about 900 bids) takes around 50 minutes. Keyword, agency and deadline filters run on the list first and stay fast.
- **Some detail pages need a vendor login** (HTTP 401). Those bids still come back from the list with `detailsError`, or are counted in a `DETAILS_UNAVAILABLE` record when a detail-only filter is on.
- **Contact emails appear only when the state publishes them.** COMMBUYS often leaves the contact field empty; the buyer's name is always there.
- Attachments are listed with links; files are not downloaded.
- Not affiliated with any state or with Periscope Holdings. Data is public solicitation information from the state portals.

### FAQ

#### How much does it cost?

Pay per event: **$2.00 per 1,000 bids** plus a $0.00005 start fee. Error records count as results. An only-new run with nothing new costs only the start fee. Platform usage is small: 256 MB by default, test runs used under 80 MB. See the [Pricing tab](https://apify.com/chimey_forearm/state-bids-scraper/pricing).

#### Does it work with Make, Zapier, Google Sheets or Slack?

Yes, through Apify integrations: Make, Zapier, Google Sheets, Slack and webhooks. A common setup is a daily schedule with **Only new bids** on, sending new bids to a sheet or a Slack channel.

#### Can I run it through the API?

Yes. Node.js with `apify-client`:

```js
import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: 'YOUR_APIFY_TOKEN' });
const run = await client.actor('chimey_forearm/state-bids-scraper').call({ states: ['IL', 'MA'], keywords: ['software'] });
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items);
```

Python with `apify-client`:

```python
from apify_client import ApifyClient
client = ApifyClient("YOUR_APIFY_TOKEN")
run = client.actor("chimey_forearm/state-bids-scraper").call(run_input={"states": ["IL", "MA"], "keywords": ["software"]})
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item)
```

#### Can AI agents use it (MCP)?

Yes. Through the Apify MCP server, Claude and other MCP-capable agents can call this Actor and read its results.

#### Is it legal to scrape state bids?

The Actor collects public solicitation information that the state portals publish for vendors, without logging in. Contact names, emails and phone numbers are returned only as the state published them. Requests are paced on purpose: the open-bid list is one CSV export per state, and the whole run stays under 90 requests per 5 minutes. Contact details are personal data under laws such as GDPR, so use them only for legitimate purposes like responding to the solicitation.

#### Found a bug or need another state?

Open an issue on the Actor's **Issues** tab with your input and what you expected.

If it saved you time, a quick review on the Store helps a solo developer keep improving it. Bugs or ideas? Open an Issue.

# Actor input Schema

## `states` (type: `array`):

Which official state portals to scan: <code>IL</code> Illinois BidBuy, <code>MA</code> COMMBUYS (Massachusetts state agencies plus cities, towns and authorities), <code>NJ</code> NJSTART, <code>OR</code> OregonBuys, <code>NV</code> NevadaEPro. Leave empty to scan all five.

## `keywords` (type: `array`):

Keep bids whose title, bid number or alternate ID contains ANY of these (word start, case-insensitive), e.g. "software", "roof", "janitorial". Empty = all open bids.

## `searchFullText` (type: `boolean`):

Matches keywords against the bulletin description, line-item text and category names too. Finds more, but reads every bid's detail page, so a big state takes a few minutes.

## `excludeKeywords` (type: `array`):

Drop bids whose title contains any of these, e.g. "farm lease", "change order notice", "emergency notice".

## `organizationContains` (type: `array`):

Keep only bids from agencies whose name contains ANY of these, e.g. "transportation", "health", "university", "city of".

## `categoryCodes` (type: `array`):

Keep bids with a line item in these commodity codes. Prefix match: <code>920</code> = all NIGP 920 IT services, <code>958-85</code> = one class. COMMBUYS uses its own UNSPSC-style codes such as <code>80-10</code>. Reads every bid's detail page.

## `dueWithinDays` (type: `integer`):

Keep only bids whose opening date (deadline) is in the next N days. 0 = any.

## `postedWithinDays` (type: `integer`):

Keep only bids made available in the last N days. 0 = any. Reads detail pages.

## `includeDetails` (type: `boolean`):

Adds posted date, department, buyer contact (name, email, phone as published), pre-bid conference, bulletin description, NIGP/UNSPSC codes, line items, attachment names and links, amendments, contract dates and state-specific fields. One extra request per bid. Same price either way.

## `onlyNew` (type: `boolean`):

Remembers bids already delivered for this same input and returns only new ones. Schedule it daily for a bid alert feed. Each record gets <code>changeType</code>.

## `alertOnNewAmendments` (type: `boolean`):

With only-new on: a bid you already got comes back once with <code>changeType: "new_amendment"</code> when the state adds an amendment. Needs every matching bid's detail page on every run, so it is slower.

## `stateKey` (type: `string`):

Name for the only-new memory. Leave empty to use one automatically per set of states. Set it to keep separate memories for different keyword tasks, or to start fresh.

## `bidUrls` (type: `array`):

Bid detail links from any of the five portals, e.g. <code>https://www.bidbuy.illinois.gov/bso/external/bidDetail.sda?docId=27-422DNR-DIREC-B-54580\&external=true</code>. Each returns that bid with full details.

## `maxBidsPerState` (type: `integer`):

Soonest deadline first. 0 = no limit.

## `maxConcurrency` (type: `integer`):

1 to 4. The run also stays under 90 requests per 5 minutes overall to respect the portals’ rate limit.

## Actor input object example

```json
{
  "states": [
    "IL",
    "MA"
  ],
  "keywords": [
    "software",
    "cloud",
    "network",
    "data"
  ],
  "searchFullText": false,
  "dueWithinDays": 0,
  "postedWithinDays": 0,
  "includeDetails": true,
  "onlyNew": false,
  "alertOnNewAmendments": false,
  "maxBidsPerState": 0,
  "maxConcurrency": 2
}
```

# Actor output Schema

## `bids` (type: `string`):

No description

## `summary` (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 = {
    "states": [
        "IL",
        "MA"
    ],
    "keywords": [
        "software",
        "cloud",
        "network",
        "data"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("chimey_forearm/state-bids-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 = {
    "states": [
        "IL",
        "MA",
    ],
    "keywords": [
        "software",
        "cloud",
        "network",
        "data",
    ],
}

# Run the Actor and wait for it to finish
run = client.actor("chimey_forearm/state-bids-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 '{
  "states": [
    "IL",
    "MA"
  ],
  "keywords": [
    "software",
    "cloud",
    "network",
    "data"
  ]
}' |
apify call chimey_forearm/state-bids-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,chimey_forearm/state-bids-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/KDs7A6zH40l53GOTE/builds/QhY391cbg8dR6TkYB/openapi.json
