NJ Government Bid Alerts avatar

NJ Government Bid Alerts

Pricing

Pay per usage

Go to Apify Store
NJ Government Bid Alerts

NJ Government Bid Alerts

Scrape open NJ government bids, RFPs, and solicitations from the New Jersey Purchasing Group. Search by keyword or county. Get bid titles, locations, published dates, closing dates, and detail URLs.

Pricing

Pay per usage

Rating

0.0

(0)

Developer

Jordan C

Jordan C

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

6 days ago

Last modified

Categories

Share

NJ Government Bid Alerts — Apify Actor

A CheerioCrawler-based Apify Actor that scrapes open solicitations (bids/RFPs) from the BidNetDirect New Jersey Purchasing Group page.

Why Cheerio?

The target page serves static HTML tables. Cheerio is ~10× faster and drastically cheaper than Playwright — no browser overhead, no JavaScript execution cost. Perfect for this use case.

Data Extracted

Each scraped bid produces a dataset item with:

FieldDescription
titleSolicitation/bid title
locationGeographic region (county, municipality, or state)
publishedDateDate published (MM/DD/YYYY)
closingDateSubmission deadline (MM/DD/YYYY)
detailUrlAbsolute URL to the bid detail page
sourceAlways "BidNetDirect - New Jersey Purchasing Group"
scrapedAtISO 8601 scrape timestamp

Input

FieldTypeDefaultDescription
keywordstring""Optional — filter bids whose title contains this text (case-insensitive)
maxResultsinteger50Maximum number of bids to return (0 = no limit)
countystring""Optional — filter bids whose location contains this text (case-insensitive)

Output

Structured JSON dataset in the Apify dataset storage.

PPE (Pay Per Event) Charges

  • search-start$0.005 — charged once per run at startup
  • bid-result$0.002 — charged per bid written to the dataset

Local Development

# Install dependencies
npm install
# Compile TypeScript
npm run build
# Validate input schema
apify validate-schema
# Run locally
npm start
# Run with Apify platform simulation
apify run --purge

Notes

  • The scraper follows pagination via the "Next" link on the page.
  • Respects maxResults — stops enqueuing new pages once the limit is reached.
  • Handles the "no bids" empty state gracefully.
  • Retries failed requests up to 3 times.