A source is where opportunities come from. Every adapter below feeds the same pipeline: ingest, dedupe, score, enrich, enroll. What differs is what each source needs from you, and Pursuvo is deliberate about asking for as little as possible.
How sources work
Each source in your workspace has a name, an adapter type, an optional cron schedule, and a set of parameters you control. The worker runs enabled sources on the daily ingestion cycle, or on the schedule you set per source, and hands anything new to the scoring engine. The sources page shows each source's last run time, last run status, and consecutive failure count, and any source can be disabled without being deleted.
SAM.gov
Federal contract opportunities from the official SAM.gov opportunities API. The API requires an API key; keys are free to generate from a SAM.gov account. Per source, you control the keyword list and the lookback window in days:
{
"keywords": ["cybersecurity", "cloud"],
"lookbackDays": 7
}Run several SAM.gov sources with different keyword lists if your practice areas are distinct; each one dedupes against the rest, so overlap is harmless.
GSA eBuy
eBuy has no public API, and its login requires a one-time password on every sign-in, so Pursuvo never asks for your eBuy credentials. Instead it works from the RFQ notification emails eBuy already sends you, roughly every four hours:
- Create an eBuy source; Pursuvo shows a forwarding address unique to it
- In the mailbox that receives your eBuy notices, add a rule forwarding them to that address
- Each forwarded notice becomes a scored opportunity on the next ingestion run
The forwarding address embeds the source's own id, so it is not guessable, and no eBuy credentials are ever stored.
State bid boards
Five state portals ship as curated presets: one click to add, no configuration. Each preset is a vetted parameter set for the generic adapters, verified against a live capture of the portal, and tagged with its state so state-tier scoring rules apply.
| State | Portal |
|---|---|
| Virginia | eVA, the Virginia Business Opportunities list |
| Texas | Electronic State Business Daily (ESBD) |
| Florida | MyFloridaMarketPlace vendor bid system |
| New York | NYS Contract Reporter |
| California | Cal eProcure, the state contracts register |
Presets ingest what each portal publishes publicly. Some portals keep detail pages behind a vendor login, so the listing metadata is what gets scored; the source record always links back to the portal for the full notice.
Inbound webhook
For systems that push instead of being polled: a partner's pipeline, an internal tool, anything that can make an HTTP POST. You name the source, describe the sending agency, and map fields with JSON paths; external id and title are required, and description, dates, NAICS code, and estimated value are optional. On creation Pursuvo shows two things:
- The endpoint:
POST /api/webhooks/ingest/<source-id> - A secret, shown once; save it when it appears
Every request must carry the secret in the X-Pursuvo-Secret header:
POST /api/webhooks/ingest/<source-id>
X-Pursuvo-Secret: <your-secret>
Content-Type: application/jsonRSS, REST, and HTML adapters
The long tail of agency bulletin boards runs on three generic adapters. They are the same machinery the state presets are built from, so anything a preset can read, you can wire up yourself.
- RSS and Atom: any public feed URL, with include and exclude keyword filters, an agency name and optional state code, and an optional cron schedule
- REST: any JSON endpoint, GET or POST, with custom headers, an optional POST body, a results path pointing at the array of items, and per-field JSON path mapping
- HTML: for portals that publish server-rendered listings and nothing else; items are selected with XPath expressions and mapped the same way. This is the adapter behind the New York and California presets