CPHI APIexhibitors.cphi.com ↗
Access CPHI pharmaceutical exhibitor data: company names, contact info, stand numbers, employee counts, and descriptions via 3 structured endpoints.
What is the CPHI API?
The CPHI Exhibitors API provides structured access to pharmaceutical trade show exhibitor data across 3 endpoints. Use list_exhibitors to retrieve paginated profiles including company name, website, telephone number, stand number, address, and employee count, or call get_exhibitor_details by company ID to fetch the full profile for a single exhibitor. A third endpoint, list_exhibitor_names, returns all company names for a given event in one response.
curl -X GET 'https://api.parse.bot/scraper/761fd647-5efb-4fa6-8898-14b2b5a024e5/list_exhibitors?limit=2&offset=0&site_id=46&event_id=597' \ -H 'X-API-Key: $PARSE_API_KEY'
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 exhibitors-cphi-com-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.
from parse_apis.cphi_exhibitor_directory_api import CPHI
cphi = CPHI()
# List exhibitor names for quick lookup
for name in cphi.exhibitors.list_names(limit=5):
print(name)
# Browse exhibitors with full details
for exhibitor in cphi.exhibitors.list(offset=0, limit=3):
print(exhibitor.company_name, exhibitor.country, exhibitor.stand_number)
# Fetch a specific exhibitor by ID
details = cphi.exhibitors.get(company_id="480734")
print(details.company_name, details.country, details.profile_url)
Fetch exhibitor profiles with pagination. Returns detailed exhibitor data including company name, website, employees, phone, address, country, stand number, and description. Each page fetches full details for each exhibitor from both JSON and HTML sources; larger page sizes are slower proportionally. Offset-based: pass offset and limit to page through results manually.
| Param | Type | Description |
|---|---|---|
| limit | integer | Max number of exhibitors to return per page. |
| offset | integer | Starting index for pagination. |
| site_id | string | The site ID for the CPHI portal. |
| event_id | string | The event ID for the target CPHI event. |
{
"type": "object",
"fields": {
"limit": "integer page size used",
"offset": "integer starting index used",
"exhibitors": "array of exhibitor detail objects",
"total_count": "integer total number of exhibitors available"
},
"sample": {
"data": {
"limit": 2,
"offset": 0,
"exhibitors": [
{
"address": "Ministry of Health, The United Republic of Tanzania, Wizara ya Afya, P.O. Box 743, Tanzania, United Republic of",
"country": "Tanzania, United Republic of",
"about_us": "Ministry of Health, The United Republic of Tanzania company profile in CPHI Online, the leading product and company search engine in the global pharma industry.",
"company_id": "480734",
"profile_url": "https://www.cphi-online.com/46/company/48/07/34/exhibitor480734-597.html",
"company_name": "Ministry of Health, The United Republic of Tanzania",
"stand_number": "E1F22",
"website_link": null,
"telephone_number": "",
"number_of_employees": ""
}
],
"total_count": 3680
},
"status": "success"
}
}About the CPHI API
What the API Returns
This API surfaces exhibitor directory data from CPHI event portals. The list_exhibitors endpoint returns paginated arrays of exhibitor objects, each containing company_id, company_name, website_link, telephone_number, number_of_employees, address, stand_number, and about_us text. The response also includes total_count so you can calculate how many pages remain. Fields like telephone_number and number_of_employees may be empty strings when the exhibitor has not provided them.
Targeting Specific Events
All three endpoints accept site_id and event_id as optional string parameters — for example, site_id=46 and event_id=597 — to scope results to a particular CPHI event instance. Without these, the endpoint falls back to a default event. list_exhibitor_names ignores pagination entirely and returns every company name in a single response alongside a total_count integer, which is useful for quick enumeration or matching against an external list.
Fetching a Single Exhibitor
The get_exhibitor_details endpoint accepts a required company_id (a numeric string obtainable from list_exhibitors results) and returns the full record: address, country, about_us, profile_url, stand_number, website_link, telephone_number, and number_of_employees. The profile_url field gives you the direct URL to that company's listing on the CPHI portal. Fields that the exhibitor has not filled in come back as null or empty string rather than being omitted.
Pagination and Coverage
Pagination on list_exhibitors is controlled by limit (items per page) and offset (starting index). The total_count in the response tells you the full size of the exhibitor pool for the targeted event, so you can iterate until offset + limit >= total_count. Each event edition has its own event_id, so data from different years of CPHI Worldwide or regional variants (CPHI India, CPHI North America, etc.) can be accessed by supplying the corresponding IDs.
The CPHI API is a managed, monitored endpoint for exhibitors.cphi.com — not a raw scraper you maintain. Every endpoint is automatically health-checked on a schedule, and when exhibitors.cphi.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 exhibitors.cphi.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?+
- Build a CRM import of pharmaceutical suppliers by pulling company name, website, telephone, and address from
list_exhibitors. - Map booth locations at a CPHI event by collecting
stand_numbervalues across all paginated exhibitor pages. - Screen potential partners by filtering
about_usdescriptions andnumber_of_employeesfrom detailed exhibitor profiles. - Generate a deduplicated attendee list for outreach by calling
list_exhibitor_namesfor a target event ID. - Enrich an existing company database by matching names from
list_exhibitor_namesand fetching missing contact fields viaget_exhibitor_details. - Track which companies exhibited across multiple CPHI event editions by querying different
event_idvalues and comparing results. - Build a competitive intelligence snapshot by aggregating
country,number_of_employees, andabout_usfields across an event's full exhibitor list.
| 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 CPHI offer an official developer API for its exhibitor directories?+
What does `get_exhibitor_details` return that `list_exhibitors` does not?+
get_exhibitor_details returns the same core fields as list_exhibitors entries but also includes profile_url — the direct link to that exhibitor's page on the CPHI portal — and country as a dedicated field. It is scoped to one company at a time via the required company_id parameter.Are product listings or exhibit categories returned for each company?+
about_us description. Product catalog data, exhibit category tags, or product classifications are not included in the current response schema. You can fork this API on Parse and revise it to add an endpoint covering product or category data if those fields are available on the exhibitor profile pages.How do I paginate through all exhibitors for a given event?+
list_exhibitors with your target event_id, set limit to your preferred page size, and start with offset=0. The response includes a total_count integer. Increment offset by limit on each subsequent call until offset is equal to or greater than total_count.Is contact data always populated for every exhibitor?+
telephone_number and number_of_employees reflect what each company has provided in their CPHI profile. When a company has not filled in a field, the API returns an empty string or null for that field rather than omitting it, so your consumer code should handle both cases.