Sijilat APIsijilat.bh ↗
Search and retrieve Bahrain commercial registration data via the Sijilat API. Access company details, partners, activities, and authorized signatories.
What is the Sijilat API?
The Sijilat.bh API provides access to Bahrain's commercial registration system through 2 endpoints, returning company registration status, business activities with ISIC4 codes, partner details, and authorized signatories. The search_companies endpoint lets you query by company name or CR number with paginated results, while get_company_details returns the full registration record including address, amendment history, and signatory authority levels.
curl -X POST 'https://api.parse.bot/scraper/b9d3434a-e7b2-4eda-87d6-bed6d57f62a6/search_companies' \
-H 'X-API-Key: $PARSE_API_KEY' \
-H 'Content-Type: application/json' \
-d '{
"page": "1",
"query": "bank",
"cr_number": "220",
"page_size": "10"
}'Typed, relational, agent-ready
A generated client with real types, enums, and the links between objects — the structure a flat JSON response can't carry. Autocompletes in your editor and reads cleanly to coding agents.
- Fully typed · autocompletes
- Objects link to objects
- Typed errors & pagination
Typed Python client. Set up the SDK in your uv project, then pull this API’s typed client:
uv add parse-sdk uv run parse init uv run parse add --marketplace sijilat-bh-api
uv run parse add --marketplace pulls a pinned snapshot of this canonical API — it won’t change underneath you. To customize it, subscribe and swap to your own copy.
"""Walkthrough: sijilat_bh_api SDK — bounded, re-runnable; every call capped."""
from parse_apis.sijilat_bh_api import Sijilat, ParseError
client = Sijilat()
# Search for companies by name
for company in client.companies.search(query="bank", limit=3):
print(company.commercial_name_en, company.status, company.cr_number)
# Drill down into a specific company's full details
company = client.companies.search(query="bank", limit=1).first()
try:
details = company.details()
print(details.company_summary.commercial_name_en, details.company_summary.cr_type)
print(details.commercial_address.town, details.commercial_address.phone)
for activity in details.business_activities:
print(activity.isic4_code, activity.activity_name)
except ParseError as e:
print(f"Error: {e.code}")
# Search by CR number
for company in client.companies.search(cr_number="220", limit=3):
print(company.cr_number, company.commercial_name_en, company.company_type)
print("exercised: companies.search, company.details")
Search for Bahrain-based companies by commercial name (English) or CR number. Returns paginated results with summary information for each matching company including registration status, type, and activities. Results are auto-iterated across pages.
| Param | Type | Description |
|---|---|---|
| page | integer | Page number for pagination (1-based). |
| query | string | Company name to search for in English (e.g. 'bank', 'trading'). At least one of query or cr_number must be provided. |
| cr_number | string | Commercial Registration number to search for (e.g. '220'). At least one of query or cr_number must be provided. |
| page_size | integer | Number of results per page. |
{
"type": "object",
"fields": {
"page": "integer — current page number",
"companies": "array of company summary objects",
"page_size": "integer — results per page",
"total_records": "integer — total number of matching companies"
},
"sample": {
"data": {
"page": 1,
"companies": [
{
"cr_no": "220",
"status": "ACTIVE",
"branch_no": "1",
"cr_number": "220-1",
"activities": "Banks - Conventional Retail Banks - Foreign Branch",
"company_type": "Branch of a Foreign Company",
"expiration_date": "04/01/2027",
"registration_date": "04/04/1961",
"commercial_name_ar": "البنك العربي ش.م.ع",
"commercial_name_en": "ARAB BANK PLC"
}
],
"page_size": 10,
"total_records": 563
},
"status": "success"
}
}About the Sijilat API
Searching the Bahrain CR Registry
The search_companies endpoint accepts either a query string (English company name, e.g. 'bank' or 'trading') or a cr_number, with at least one required. Results are paginated using page and page_size parameters. Each response includes total_records, the current page, and a companies array of summary objects covering registration status, company type, and activities. This is the starting point for getting the cr_no and branch_no values needed for detailed lookups.
Retrieving Full Company Records
The get_company_details endpoint takes a cr_no (required) and optional branch_no — both obtained from search_companies results — and returns a structured record with six main sections. company_summary holds core fields like names in both scripts, company type, registration status, and key dates. commercial_address includes building, road, block, town, and contact information. business_activities lists each activity with its ISIC4 code and description.
Partners, Signatories, and History
company_partners returns an array of partner objects with names and nationality. authorized_signatories includes each signatory's name, nationality, and authority level — useful for due diligence workflows. amendment_history provides the last 10 amendment records for a given CR, giving a recent change log without requiring access to the full historical archive.
The Sijilat API is a managed, monitored endpoint for sijilat.bh — not a raw scraper you maintain. Every endpoint is automatically health-checked on a schedule, and when sijilat.bh 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 sijilat.bh 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?+
- Verify Bahrain company registration status and type before entering a business relationship
- Retrieve ISIC4-coded business activities to classify companies by sector for market research
- Extract authorized signatory names and authority levels for KYC and compliance screening
- Enumerate company partners and their nationalities for ownership structure analysis
- Monitor amendment history to detect recent structural or ownership changes in a CR
- Build a Bahrain business directory by bulk-searching names or CR number ranges
- Cross-reference commercial addresses for geographic analysis of registered businesses
| Tier | Price | Credits/month | Rate limit |
|---|---|---|---|
| Free | $0/mo | 100 | 5 req/min |
| Hobby | $30/mo | 1,000 | 20 req/min |
| Developer | $100/mo | 5,000 | 100 req/min |
One credit = one API call regardless of which marketplace API you call. Exceeding the rate limit returns a 429 response. Authenticate with the X-API-Key header.
Does Sijilat have an official developer API?+
What does `get_company_details` return beyond what `search_companies` provides?+
search_companies returns summary-level data: registration status, company type, and activities at a high level. get_company_details returns the full record — commercial_address with building/road/block/town, business_activities with ISIC4 codes, company_partners with nationalities, authorized_signatories with authority levels, and amendment_history covering the last 10 amendments.Does the API cover branches separately from the main CR?+
get_company_details accepts a branch_no parameter alongside cr_no, allowing you to retrieve records for specific branches of a company. Both values are surfaced in search_companies results.Does the API return financial statements or capital amounts for registered companies?+
How far back does the amendment history go?+
amendment_history field in get_company_details returns the last 10 amendment records for a given CR. Earlier amendments are not currently included in the response. You can fork the API on Parse and revise it to extend historical coverage if a deeper record set is needed.