top of page

How to scrape government and public records data from OregonBuys using the Minexa.ai extension

Government procurement portals publish some of the most consistently structured public data available online. OregonBuys, Oregon's centralized public purchasing system at oregonbuys.gov, lists open bids from state agencies, counties, school districts, tribal organizations, and public utilities all in one place. The data is public, updated regularly, and genuinely useful for vendors tracking opportunities, researchers monitoring public spending, and analysts building procurement intelligence feeds.

The challenge is that reading it page by page is slow, and there is no export button. This walkthrough shows how to extract that data into a clean, structured file using Minexa.ai, a Chrome extension that handles the full extraction process without any coding required.

What you get: a structured dataset of open bids

Before walking through the steps, here is a sample of what the extracted output looks like. Each row in the dataset corresponds to one open bid listing on OregonBuys. The fields below come directly from the page structure with no manual formatting applied.

[
  {
    "bid_solicitation": "S-10700-00017226",
    "organization_name": "Department of Administrative Services",
    "buyer": "Nancy Doll",
    "description": "MMCAP RFP 37259 - Medical Supplies",
    "bid_opening_date": "07/20/2026 12:00:00",
    "status": "Sent",
    "bid_detail_link": "/bso/external/bidDetail.sda?docId=S-10700-00017226&external=true&parentUrl=close",
    "row_index": "1"
  },
  {
    "bid_solicitation": "S-C01260-00017225",
    "organization_name": "Multnomah County",
    "buyer": "Tessa Godat",
    "description": "On-Call Fencing - Replace, Repair, Remove and Install",
    "bid_opening_date": "07/16/2026 14:00:00",
    "status": "Sent",
    "bid_detail_link": "/bso/external/bidDetail.sda?docId=S-C01260-00017225&external=true&parentUrl=close",
    "row_index": "2"
  }
]

Each record gives you the solicitation number, the issuing organization, the assigned buyer, a plain-language description of what is being procured, the bid opening deadline, the current status, and a relative URL pointing to the full bid detail page. That last field, bid_detail_link, is particularly useful if you want to build a second extraction layer that pulls the complete bid specifications from each individual page.

Step 1: open the extension on the OregonBuys bids page

Install the Minexa.ai Chrome extension from the Chrome Web Store, then navigate to the OregonBuys open bids search page. Once the page has fully loaded, click the Minexa.ai icon in your browser toolbar to open the extension panel.

The extension detects the current page automatically. You will see a confirmation prompt asking whether you are on the right page. Click I'm on the right page to proceed.

Step 2: confirm pagination so all bid pages are captured

What you get at this stage is automatic detection of the pagination controls on the OregonBuys listing. Minexa.ai identifies the next-page navigation and shows you a list of the paginated URLs it will process. Review the detected pages and click Continue.

Once pagination logic is validated, you choose how deep to go. You can scrape just the listing page (one row per bid with the summary fields shown above), or you can choose to also follow each bid_detail_link and extract the full bid specification from every linked detail page. For most monitoring use cases, the list-only extraction is sufficient to start.

Step 3: select your scraping mode and highlight the data container

The next screen gives you a choice between simple and advanced scraping modes. Simple mode works well for most public listing pages including OregonBuys. Select it and proceed.

Minexa.ai then overlays the page and asks you to hover over and click the HTML container that holds the full block of bid listings. You do not need to click individual fields. Click the parent element that wraps all the rows, and Minexa.ai automatically highlights it and identifies every data point inside it.

Step 4: review the extracted data points

After clicking Create Scraper, Minexa.ai processes the container and returns a full list of discovered columns. This is what you get without writing a single selector: every field the page exposes, named and ready to use.

One field worth noting here is event_details. Rather than returning a flat string, it returns a structured array of objects, one per span element inside each bid row. Each object has a value, a tag type, and an attribute field. The values in order correspond to: solicitation number, organization name, buyer name, bid description, opening date, and status. In practice you can access all six core fields from this single array, which is useful if you want to process the data programmatically and keep the row structure compact.

The row_class field captures the CSS class assigned to each table row, alternating between two values that identify even and odd rows. This can be used during post-processing to confirm row parity or detect any structural anomalies in the output. The row_index field gives you a zero-based integer position for each listing within the current page, which is helpful when joining data across multiple paginated pages.

Step 5: run the job and export your data

Once the scraper is created, click through the remaining prompts to save the job. The summary screen confirms the scraper configuration and gives you options to connect Google Sheets or set up a recurring schedule so the dataset refreshes automatically.

Your scraping job now appears in the jobs list. Click Run to start extraction across all detected pages.

As the job runs, rows populate in real time. Once complete, you can export the full dataset to Excel, Google Sheets, or JSON directly from the results view.

What to do with the data

The extracted dataset gives you a clean, flat table of open bids across Oregon public entities. From there, common next steps include filtering by organization to track specific agencies, sorting by bid_opening_date to prioritize upcoming deadlines, or using the bid_detail_link values as input URLs for a second Minexa.ai scraper trained on the individual bid detail pages to pull full specifications, attachments lists, and awarded vendor information.

Because the scraper is saved and reusable, running it again next week or next month requires no setup. The same job picks up new listings as they appear on OregonBuys without any changes to the configuration.

For a related example of extracting structured data from another government funding source, see how to scrape non-profits and NGOs data from Grants.gov.

Recent Posts

See All

Comments


Heading 2

bottom of page