SAP APIbusiness.network.sap.com ↗
Search and retrieve public procurement opportunities on SAP Business Network Discovery. Filter by budget, date, and keyword. No login required.
What is the SAP API?
The SAP Business Network Discovery API exposes 2 endpoints that cover publicly listed procurement opportunities (sourcing leads) on SAP's B2B procurement platform. Use search_opportunities to query and paginate through live RFx postings filtered by keyword, budget range, and posting date, then call get_opportunity to retrieve full notice details including UNSPSC category codes, buyer organisation name, budget bounds, and key dates.
curl -X GET 'https://api.parse.bot/scraper/2607b74f-b324-4ea0-ab71-0e5038ee0db5/search_opportunities?sort=RELEVANCE&query=software&deadline_before=2036-09-22' \ -H 'X-API-Key: $PARSE_API_KEY'
Searches the publicly visible procurement opportunities (sourcing leads) on SAP Business Network Discovery. One round trip returns one page of opportunity summaries plus the total match count and a breakdown of matches by budget range. All optional filters combine (AND). Pagination is page-number based: `page` (default 1) and `page_size` (default 10, clamped to 50) are the caller's paging inputs, and `has_more` tells whether a further page exists. `query` defaults to an empty string, which browses all leads. `deadline_before` defaults to the current UTC date, so a call that omits it returns only leads whose response deadline falls on or before today (the site lists only leads that are still open, so this is typically a small set of leads closing today); pass a later date, e.g. 2030-12-31, to see every open lead. When `include_details` is true the full public notice is fetched for every result on the page (one extra round trip per result, so up to 50 extra requests for a 50-row page) and the detail-only fields of get_opportunity (status, buyer_display_name, buyer_account_type, buyer_badge, external_reference, currency, is_exact_amount, last_modified, award_date, contact_name, physical_presence_preferred, humanitarian_aid, certificate_preferences, keywords, attachment_count, view_count, response_count, public_posting_url) are merged into each result; fields already present in the summary keep their summary form, except that a null summary buyer_name is filled from the notice. `details_fetched` and `detail_errors` (rfx_id plus error label for each notice that could not be fetched) report the fan-out coverage and are present only when include_details is true. Every lead currently exposed publicly carries lead_type RFI regardless of the notice's actual RFP/RFQ nature stated in the title. Summary amounts are shown as displayed by the site; `description_html` is the buyer's rich-text notice as HTML. A query with no matches returns total_results 0 and an empty results array.
| Param | Type | Description |
|---|---|---|
| page | integer | 1-based page number. |
| sort | string | Result ordering. |
| query | string | Free-text search over title, description and categories. Empty browses all leads. |
| page_size | integer | Results per page, 1 to 50; larger values are clamped to 50. |
| max_amount | number | Only leads whose budget is at most this amount. Omitted = no upper bound. |
| min_amount | number | Only leads whose budget upper bound is at least this amount. Omitted = no lower bound. |
| posted_after | string | ISO date YYYY-MM-DD; only leads posted on or after this day (UTC). |
| posted_before | string | ISO date YYYY-MM-DD; only leads posted on or before this day (UTC). |
| deadline_after | string | ISO date YYYY-MM-DD; only leads whose response deadline is on or after this day (UTC). |
| deadline_before | string | ISO date YYYY-MM-DD; only leads whose response deadline is on or before this day (UTC). When omitted, the current UTC date is used, so only leads closing on or before today are returned. |
| include_details | boolean | When true, each result is enriched with the detail-only fields of get_opportunity at the cost of one extra request per result. |
{
"type": "object",
"fields": {
"page": "page number returned",
"query": "echo of the search text used",
"results": "array of opportunity summaries: rfx_id (string, use with get_opportunity), title, lead_type, buyer_name (often null in summaries unless include_details fills it), description_html, min_amount/max_amount (numbers), contract_length_months (integer or null), date_posted/start_date/response_deadline (ISO 8601 UTC), public_sector (boolean), categories (array of category name strings), service_locations (array of location name strings); with include_details=true each row also carries the detail-only get_opportunity fields (status, buyer_display_name, buyer_account_type, buyer_badge, external_reference, currency, is_exact_amount, last_modified, award_date, contact_name, physical_presence_preferred, humanitarian_aid, certificate_preferences, keywords, attachment_count, view_count, response_count, public_posting_url)",
"has_more": "true when page * page_size < total_results",
"page_size": "effective page size after clamping",
"detail_errors": "only with include_details=true: array of {rfx_id, error} for results whose notice could not be fetched (empty when all succeeded)",
"total_results": "total number of matching leads on the site for these filters",
"details_fetched": "only with include_details=true: number of results whose notice was fetched and merged",
"counts_by_amount_range": "object mapping site budget-range labels (e.g. \"1K ~ 10K\") to match counts"
},
"sample": {
"data": {
"page": 1,
"query": "",
"results": [
{
"title": "E6TOR-23RM04 Light Construction Equipment Rental",
"rfx_id": "16583696",
"status": "Published",
"currency": "CAD",
"keywords": [],
"lead_type": "RFI",
"award_date": null,
"buyer_name": "Government of Canada / Gouvernement du Canada",
"categories": [
"Power drills",
"Impact wrenches",
"Power nail guns"
],
"max_amount": 74341067.81,
"min_amount": 750.92,
"start_date": "2023-06-14T15:14:11Z",
"view_count": 616,
"buyer_badge": "WALK_UP",
"date_posted": "2023-06-14T15:14:11Z",
"contact_name": null,
"last_modified": "2023-06-15T17:07:27Z",
"public_sector": true,
"response_count": 11,
"is_exact_amount": false,
"attachment_count": 0,
"description_html": "<p><strong>Offerors may submit an offer at any point during the solicitation period.</strong></p>",
"humanitarian_aid": "None",
"response_deadline": "2028-06-30T18:00:00Z",
"service_locations": [
"Ontario"
],
"buyer_account_type": "ENTERPRISE",
"buyer_display_name": "Government of Canada / Gouvernement du Canada",
"external_reference": "Doc4053526199",
"public_posting_url": "https://portal.us.bn.cloud.ariba.com/dashboard/public/appext/comsapsbncdiscoveryui#/RfxEvent/preview/16583696?anId=ANONYMOUS",
"contract_length_months": null,
"certificate_preferences": [],
"physical_presence_preferred": false
}
],
"has_more": true,
"page_size": 5,
"detail_errors": [],
"total_results": 1297,
"details_fetched": 5,
"counts_by_amount_range": {
"< 1K": 965,
">= 5M": 29,
"1M ~ 5M": 18,
"1K ~ 10K": 116,
"10K ~ 50K": 34,
"500K ~ 1M": 20,
"50K ~ 100K": 31,
"100K ~ 500K": 45
}
},
"status": "success"
}
}About the SAP API
What the API covers
SAP Business Network Discovery is SAP's platform where buyers post public sourcing leads — RFIs and similar procurement notices — to solicit supplier responses. This API surfaces the public-facing subset of that data across two endpoints, returning structured fields for each opportunity without requiring an account or session.
search_opportunities
This endpoint accepts up to eight optional filter parameters. query runs a free-text search over title, description, and categories. min_amount and max_amount bound the budget field. posted_after and posted_before accept ISO dates (YYYY-MM-DD) to restrict by posting day. page and page_size (1–50, clamped) control pagination; the has_more flag and total_results count tell you how many pages remain. Each result in results includes an rfx_id string, a title, a lead_type, and a buyer_name (which is often null at the summary level). The counts_by_amount_range object breaks total matches into site-labelled budget buckets such as "1K ~ 10K".
get_opportunity
Pass any rfx_id from the search results to retrieve the complete notice. The response includes buyer_name, status (e.g. Published), currency, max_amount, award_date, lead_type, keywords (buyer-added tags), and a categories array of objects each carrying a unspsc_code and human-readable name. UNSPSC codes let you map leads to standardised commodity classifications for analysis or routing.
Scope and freshness
Both endpoints reflect the public Discovery feed — only notices that buyers have made visible without login are accessible. Private or restricted postings, supplier profiles, transaction history, and awarded contract data are not part of the public feed and are not returned.
The SAP API is a managed, monitored endpoint for business.network.sap.com — not a raw scraper you maintain. Every endpoint is automatically health-checked on a schedule, and when business.network.sap.com changes and a check fails, the API is automatically queued for repair and re-verified. It is built to keep working as the site underneath it changes.
This isn't an official business.network.sap.com API — it's an independent, maintained REST wrapper over public data. Where the source has no official API (or only a limited one), Parse gives you a stable contract over a source that never promised one, and keeps it current. Need a new endpoint or field? You can revise it yourself in plain English and the agent rebuilds it against the live site in minutes — contributing the change back to the shared API is free.
Will this API break when the source site changes?+
Is this an official API from the source site?+
Can I fix or extend this API myself if I need a new endpoint or field?+
What happens if I call an endpoint that has an issue?+
- Monitor new RFx postings in specific commodity categories using UNSPSC codes from get_opportunity
- Alert sales teams when a buyer in their target sector posts a sourcing lead matching a keyword
- Aggregate counts_by_amount_range data to track procurement volume trends across budget tiers
- Filter opportunities by posted_after and max_amount to surface recent small-budget leads for SME suppliers
- Build a supplier-facing dashboard that maps open leads to internal product categories using UNSPSC classification
- Track how many total_results exist for a given query over time to gauge market demand for a category
- Enrich a CRM with buyer_name and award_date fields when a matched opportunity closes
| Tier | Price | Credits/month | Rate limit |
|---|---|---|---|
| Free | $0/mo | 200 | 5 req/min |
| Hobby | $30/mo | 1,000 | 20 req/min |
| Developer | $100/mo | 5,000 | 100 req/min |
| Team | $300/mo | 20,000 | 300 req/min |
| Company | $1,000/mo | 100,000 | 500 req/min |
Each endpoint has a fixed posted price per successful call — most fall between 1 and 10 credits — shown on this API's page before you run it. Exceeding the rate limit returns a 429 response. Authenticate with the X-API-Key header.