Discover/Nova Scotia API
live

Nova Scotia APIprocurement-portal.novascotia.ca ↗

Search 30k+ Nova Scotia public tender notices, fetch full tender details, and list bid documents with download URLs via 3 structured endpoints.

Endpoint health
monitored
get_tender
list_tender_documents
search_tenders
Checks pendingself-healing
Endpoints
3
Updated
2h ago

What is the Nova Scotia API?

This API exposes three endpoints covering the Nova Scotia Procurement Portal's full catalogue of roughly 30,000 public tender notices — open and historical. Use search_tenders to filter by keyword, status, organization, category, and date range; call get_tender for a complete tender record including buyer details, UNSPSC classifications, award data, and closing dates; and use list_tender_documents to retrieve attached bid documents with direct download URLs.

This call costs2 credits / call— charged only on success
Try it
1-based page number.
Result ordering.
Comma-separated tender statuses (case-insensitive), e.g. 'Open,Awarded'. Omitted = all statuses.
Free-text search over tender ID and title. Omitted = no keyword restriction.
Comma-separated procurement categories. Omitted = all categories.
Rows per page, 1-100 (larger values are clamped to 100).
Buyer organization name exactly as listed in the portal's Organization filter (e.g. 'Halifax Regional Municipality'). Matches the tender's organization field. Omitted = all organizations.
Latest posted date, ISO YYYY-MM-DD (inclusive).
Latest closing date, ISO YYYY-MM-DD (inclusive).
Earliest posted date, ISO YYYY-MM-DD (inclusive).
Earliest closing date, ISO YYYY-MM-DD (inclusive).
Comma-separated solicitation type names exactly as the portal displays them, e.g. 'Request for Proposal (Construction),Request for Quotation'. Confirmed values: Request for Proposal (Construction); Request for Proposal (Negotiations, Concurrent, BAFO); Request for Proposal (Negotiations, Consecutive); Request for Proposal (No Negotiation, Contract A); Request for Quotation; Request for Information; Request for Standing Offer; Request for Supplier Qualification (Prequalification for RFP); Request for Supplier Qualification (Supplier Arrangement); Advance Contract Award Notice; Notice of Participation in Buying Group; Notice of Proposed Procurement; Other. Historical notices also carry legacy labels such as 'Tender' and 'Request for Tender', which are accepted verbatim. Omitted = all types.
→ api.parse.bot/scraper/66aba440-65c7-46a7-93c8-4e64555ff542/<endpoint>
Ready to send
Fill in the parameters and hit sign in to send to see live response data here.
Call it over HTTPgrab a free API key at signup
curl -X GET 'https://api.parse.bot/scraper/66aba440-65c7-46a7-93c8-4e64555ff542/search_tenders?status=OPEN&solicitation_type=Request+for+Proposal+%28Construction%29%2CRequest+for+Quotation' \
  -H 'X-API-Key: $PARSE_API_KEY'
All endpoints · 3 totalmissing one? ·

Searches the portal's public tender notices (all ~30k notices, open and historical) and returns one page of tender summaries, newest posted first by default. Keyword matches tender ID and title. Solicitation type, status and category filters accept comma-separated lists (any match); organization is a single buyer name as shown in the portal's Organization dropdown; closing and posted date ranges are inclusive ISO dates. Pagination is a true page/page_size window over the filtered result set: page defaults to 1, page_size defaults to 25 and is capped at 100; total_results is the portal's own count and has_more tells whether a later page exists. Each row is a summary only; use get_tender for description, contacts, categories, awards and attachments. An unrecognized status or category value is rejected; unrecognized solicitation types and organizations are passed to the portal and simply match nothing. closing_date is a UTC timestamp 'YYYY-MM-DD HH:MM:SS'.

Input
ParamTypeDescription
pageinteger1-based page number.
sortstringResult ordering.
statusstringComma-separated tender statuses (case-insensitive), e.g. 'Open,Awarded'. Omitted = all statuses.
keywordstringFree-text search over tender ID and title. Omitted = no keyword restriction.
categorystringComma-separated procurement categories. Omitted = all categories.
page_sizeintegerRows per page, 1-100 (larger values are clamped to 100).
organizationstringBuyer organization name exactly as listed in the portal's Organization filter (e.g. 'Halifax Regional Municipality'). Matches the tender's organization field. Omitted = all organizations.
posted_date_tostringLatest posted date, ISO YYYY-MM-DD (inclusive).
closing_date_tostringLatest closing date, ISO YYYY-MM-DD (inclusive).
posted_date_fromstringEarliest posted date, ISO YYYY-MM-DD (inclusive).
closing_date_fromstringEarliest closing date, ISO YYYY-MM-DD (inclusive).
solicitation_typestringComma-separated solicitation type names exactly as the portal displays them, e.g. 'Request for Proposal (Construction),Request for Quotation'. Confirmed values: Request for Proposal (Construction); Request for Proposal (Negotiations, Concurrent, BAFO); Request for Proposal (Negotiations, Consecutive); Request for Proposal (No Negotiation, Contract A); Request for Quotation; Request for Information; Request for Standing Offer; Request for Supplier Qualification (Prequalification for RFP); Request for Supplier Qualification (Supplier Arrangement); Advance Contract Award Notice; Notice of Participation in Buying Group; Notice of Proposed Procurement; Other. Historical notices also carry legacy labels such as 'Tender' and 'Request for Tender', which are accepted verbatim. Omitted = all types.
Response
{
  "type": "object",
  "fields": {
    "page": "page number returned",
    "tenders": "array of tender summaries: tender_id, title, solicitation_type, status (OPEN|AWARDED|CANCELLED|EXPIRED), organization, end_user_entity (department/partner, null when none), posted_date (YYYY-MM-DD), closing_date (UTC 'YYYY-MM-DD HH:MM:SS'), sent_to_canada_buys",
    "has_more": "true when page * page_size < total_results",
    "page_size": "effective rows per page after clamping",
    "total_results": "portal's total count of tenders matching the filters"
  },
  "sample": {
    "data": {
      "page": 1,
      "tenders": [
        {
          "title": "Supply and Installation of Roof Top Air-Handling Unit at Scotiabank Centre",
          "status": "OPEN",
          "tender_id": "HRM-2026-0471",
          "posted_date": "2026-09-24",
          "closing_date": "2026-10-14 03:00:00",
          "organization": "Halifax Regional Municipality",
          "end_user_entity": null,
          "solicitation_type": "Request for Proposal (Construction)",
          "sent_to_canada_buys": true
        },
        {
          "title": "RFC-Sydney Correctional Facility Main Roof Replacement",
          "status": "AWARDED",
          "tender_id": "Doc3258805979",
          "posted_date": "2026-08-19",
          "closing_date": "2026-09-14 17:00:00",
          "organization": "Province of Nova Scotia",
          "end_user_entity": "Department of Public Works",
          "solicitation_type": "Request for Proposal (Construction)",
          "sent_to_canada_buys": true
        }
      ],
      "has_more": true,
      "page_size": 5,
      "total_results": 180
    },
    "status": "success"
  }
}

About the Nova Scotia API

Searching Tenders

The search_tenders endpoint pages through the portal's full notice history, returning summaries that include tender_id, title, solicitation_type, status (OPEN, AWARDED, CANCELLED, or EXPIRED), and organization. Filters can be stacked: keyword matches tender ID and title text, status and category accept comma-separated values for OR logic, organization accepts the buyer name exactly as listed in the portal, and posted_date_to lets you anchor a date window. Results are sorted newest-first by default, and has_more plus total_results drive pagination.

Full Tender Records

get_tender accepts a tender_id (e.g. HRM-2026-0471) and returns the complete public record in one call. Response fields cover the buyer object (name, address, phone, email), contact object (name, email, phone, and available contact methods), closing_date in UTC alongside the local Atlantic closing_time, categories as an array of UNSPSC classifications down to four levels, attachments with per-file metadata, awards with supplier name, location, award_amount, and currency_code, and a bids array of published bid records.

Bid Documents

list_tender_documents returns every public attachment for a tender without requiring a portal account. Each entry carries attachment_id, document_type (e.g. TENDER_OTHER, TENDER_ADDENDUM), and kind: file entries include filename, content_type, size, size_units, and a download_url; link entries provide an external_url; note entries carry inline text. The file_count field gives a quick tally of hosted files. This endpoint is the fastest path to enumerating a tender's downloadable PDFs, DOCX, XLSX, and ZIP packages.

Reliability & maintenance

The Nova Scotia API is a managed, monitored endpoint for procurement-portal.novascotia.ca — not a raw scraper you maintain. Every endpoint is automatically health-checked on a schedule, and when procurement-portal.novascotia.ca 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 procurement-portal.novascotia.ca 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?+
It's built not to. Every endpoint is health-checked on a schedule with automated test probes. When the source site changes and a check fails, the API is automatically queued for repair and re-verified — that's the self-healing layer. Each API page shows when its endpoints were last verified. And because marketplace APIs are shared, any fix reaches everyone using it.
Is this an official API from the source site?+
No — Parse APIs are independent, managed REST wrappers over publicly available data. That is the point: where a site has no official API (or only a limited one), Parse gives you a maintained, monitored endpoint for that data and keeps it working as the site changes — so you get a stable contract over a source that never promised one.
Can I fix or extend this API myself if I need a new endpoint or field?+
Yes — and you don't have to wait on us. This API was generated by the Parse agent, which stays attached. Describe the change in plain English ("add an endpoint that returns reviews", "fix the price field") in the revise box on the API page or via the revise_api MCP tool, and the agent rebuilds it against the live site in minutes. Contributing the change back to the public API is free.
What happens if I call an endpoint that has an issue?+
Errors are machine-readable: a bad call returns a clean status with the list of available endpoints and a repair hint, so an agent (or you) can recover or trigger a fix instead of failing silently. Confirmed failures feed the automatic repair queue.
Common use cases
  • Monitor newly posted OPEN tenders from specific Nova Scotia buyer organizations by polling search_tenders with status=Open and an organization filter.
  • Build a tender-alert service that watches posted_date_to and keyword to surface relevant procurement notices as they appear.
  • Extract award data — supplier name, location, and award_amount — from get_tender to track public spending by category or organization.
  • Compile UNSPSC category breakdowns of provincial procurement by aggregating categories fields across historical tender records.
  • Automate document retrieval by calling list_tender_documents for open tenders and downloading all files where kind=file and document_type=TENDER_ADDENDUM.
  • Analyse closing-date distributions by collecting closing_date and closing_time fields across a filtered slice of tenders.
  • Map buyer organization addresses using the buyer.street_address, city, and postal_code fields returned by get_tender.
Pricing & limitsSee full pricing →
TierPriceCredits/monthRate limit
Free$0/mo2005 req/min
Hobby$30/mo1,00020 req/min
Developer$100/mo5,000100 req/min
Team$300/mo20,000300 req/min
Company$1,000/mo100,000500 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.

Frequently asked questions
Does the Nova Scotia Procurement Portal have an official developer API?+
No. The portal at procurement-portal.novascotia.ca does not publish a documented public API for developers. This Parse API is the structured programmatic interface to that data.
What does `get_tender` return that `search_tenders` does not?+
search_tenders returns lightweight summaries useful for filtering and pagination. get_tender adds the full buyer object with address and phone, the contact object, UNSPSC categories down to four levels, attachments with file metadata, the awards array with supplier and amount details, bids, and both UTC closing_date and local Atlantic closing_time.
Can I retrieve the actual content of bid documents through the API?+
The API returns metadata and direct download_url values for hosted files via list_tender_documents, but does not return file contents inline. You follow the download_url to fetch the PDF, DOCX, or other file directly. You can fork this API on Parse and revise it to add an endpoint that fetches and parses file contents.
Does the API cover private or restricted tenders that require a portal login?+
The API covers only public tender notices and documents accessible without a portal account. Login-gated content such as plan-holder lists or confidential addenda is not exposed. You can fork this API on Parse and revise it to add authenticated access if you hold valid portal credentials.
How far back does the tender history go, and how is pagination handled?+
search_tenders covers all notices in the portal — roughly 30,000 open and historical records. Pages are 1-based and capped at 100 rows each (page_size is clamped to 100). Use total_results and has_more to determine whether additional pages exist.
Page content last updated . Spec covers 3 endpoints from procurement-portal.novascotia.ca.
Related APIs in Government PublicSee all →
eprocure.gov.in API
Access data from eprocure.gov.in.
bidsandtenders.com API
Search and discover public bid opportunities across Canada and the USA to find relevant procurement projects for your business. Access real-time tender data from the bids&tenders eProcurement platform to identify and pursue new contract opportunities.
tenders.gov.uk API
Search and access UK government public procurement notices, tenders, and contract opportunities in real-time, with the ability to retrieve detailed notice information and browse standardized classification codes. Get comprehensive procurement data in structured formats to analyze tender patterns and find relevant contracting opportunities.
tenders.gov.in API
Search and monitor current government tenders from India's Central Public Procurement Portal and GePNIC systems, filtering by organizations and accessing detailed tender information. Stay updated on the latest procurement opportunities and bids from Indian government agencies in one centralized location.
opportunities.bidsandtenders.com API
Search and filter public bid opportunities by keywords, status, organization, publish date, and bid type, then retrieve comprehensive details including descriptions, key dates, meetings, and related documents for any listing. Access a complete view of available tender opportunities with sorting and pagination to easily find the bids most relevant to your business.
portalcompraspublicas.com.br API
Search and access detailed information about public tenders, bids, and procurement documents from Brazilian municipalities and states. Retrieve tender items, clarification logs, winner details, and all related documentation to monitor and analyze public purchasing activity across Brazil.
zakazky.gov.cz API
Search and access detailed information about Czech public procurement tenders from Zakázky GOV, including AI-generated summaries of tender documentation to quickly understand project requirements and opportunities. Find the right procurement opportunities by browsing aggregated tenders and reviewing their complete details all in one place.
portaldecompraspublicas.com.br API
Search and retrieve Brazilian public procurement processes from Portal de Compras Públicas. Access tender listings with filters for state, municipality, modality, date range, and status, and retrieve full process details including timelines, buyer information, and official notice data.