Cphieventplanner APIvisitor.cphieventplanner.com ↗
List and search CPHI Milan 2026 exhibitors, fetch booth numbers, contact details, documents, and classification attributes via 2 JSON endpoints.
What is the Cphieventplanner API?
The visitor.cphieventplanner.com API exposes two endpoints covering the full CPHI Milan 2026 exhibitor directory: list_exhibitors returns paginated summaries of up to 50 companies per page with booth and type data, while get_exhibitor delivers a complete profile including contact details, documents, classification attributes, and social handles for any single exhibitor identified by its ID.
curl -X GET 'https://api.parse.bot/scraper/33c3b68b-dc2d-4bbf-a523-83862735c002/list_exhibitors?search=pharma' \ -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 visitor-cphieventplanner-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.
"""Walkthrough: CPHI Milan 2026 Exhibitors — search, browse, and drill into full profiles."""
from parse_apis.visitor_cphieventplanner_com_api import CphiExhibitors, ExhibitorNotFound
client = CphiExhibitors()
# Search exhibitors by keyword; limit= caps total items fetched across pages.
for summary in client.exhibitor_summaries.list(search="pharma", limit=5):
print(summary.name, "|", summary.booth, "|", summary.exhibitor_type)
# Drill into the first match's full profile via the typed navigation link.
first = client.exhibitor_summaries.list(search="pharma", limit=1).first()
if first is not None:
detail = first.details()
print(detail.name, detail.exhibitor_type)
print("Booths:", ", ".join(detail.booths))
print("Country:", detail.address.country)
for attr in detail.attributes:
print(f" {attr.name}: {', '.join(attr.values)}")
for doc in detail.documents[:3]:
print(f" Doc: {doc.name} — {doc.url}")
# Point-lookup by id discovered from the earlier search.
if first is not None:
try:
exhibitor = client.exhibitors.get(exhibitor_id=first.exhibitor_id)
print(exhibitor.name, "|", exhibitor.website_url)
except ExhibitorNotFound:
print("Exhibitor no longer available")
print("exercised: exhibitor_summaries.list / details / exhibitors.get")
Returns one page of exhibitors from the CPHI Milan 2026 exhibitor list (this API is fixed to that event), 50 exhibitors per page, in the site's own order (featured exhibitors first, then alphabetical). An optional free-text search narrows the list to matching exhibitors the same way the site's search box does. Pagination is cursor based: each page carries total_count, has_more and next_cursor; pass next_cursor back unchanged as cursor to get the following page, and omit cursor for the first page. Each row carries exhibitor_id, which get_exhibitor accepts. A search with no matches returns an empty exhibitors array with total_count 0. One upstream request per call.
| Param | Type | Description |
|---|---|---|
| cursor | string | Opaque continuation token taken from next_cursor of the previous page (pass unchanged). Omitted = first page. |
| search | string | Free-text search over exhibitor names/profiles, e.g. a company name fragment. Omitted = the whole directory. |
{
"type": "object",
"fields": {
"search": "the search term applied, null when none",
"has_more": "boolean, true when another page exists",
"exhibitors": "array of exhibitor summaries: exhibitor_id, name, exhibitor_type (site label such as Featured Exhibitors or Exhibitors), booth (stand number, may be null), logo_url, website_url (may be null), description (plain-text profile blurb, may be null)",
"next_cursor": "string continuation token for the next page, null on the last page",
"total_count": "integer, total exhibitors matching the current search across all pages (site-reported)"
},
"sample": {
"data": {
"search": "pharma",
"has_more": true,
"exhibitors": [
{
"name": "Pharmaffiliates Private Limited",
"booth": "5D106",
"logo_url": "https://static.swapcard.com/public/images/20a92d2910dd49f2a25692e2847d9c8e.jpeg",
"description": "Pharmaffiliates is a GLP-compliant CRDO, audited and accepted by the US FDA...",
"website_url": "https://www.pharmaffiliates.com",
"exhibitor_id": "RXhoaWJpdG9yXzI0Nzg0MTM=",
"exhibitor_type": "Featured Exhibitors"
},
{
"name": "Pharmaline s.a.l",
"booth": "7G131",
"logo_url": "https://static.swapcard.com/public/images/29a2a1f3cac24f65a6fdd0643b24d17b.jpeg",
"description": "Pharmaline focus on the development and manufacturing of a diverse range of branded generics...",
"website_url": null,
"exhibitor_id": "RXhoaWJpdG9yXzI0Nzc4MjM=",
"exhibitor_type": "Exhibitors"
}
],
"next_cursor": "WzQ4Mi4wMzk5NSwiUlhob2FXSnBkRzl5WHpJME56Y3pNREU9Il0=",
"total_count": 680
},
"status": "success"
}
}About the Cphieventplanner API
Directory Listing with list_exhibitors
list_exhibitors returns one page of 50 exhibitor summaries from the CPHI Milan 2026 directory in the site's native order — featured exhibitors first, then alphabetical. Each record in the exhibitors array includes exhibitor_id, name, exhibitor_type (e.g. "Featured Exhibitors" or "Exhibitors"), and booth. The total_count field gives the site-reported count of matching companies across all pages. Pagination is cursor-based: pass the opaque string from next_cursor into the cursor parameter on the next call; a null next_cursor or has_more: false signals the last page. The optional search parameter filters results to matching exhibitor names or profiles.
Full Exhibitor Profile with get_exhibitor
get_exhibitor accepts an exhibitor_id taken from list_exhibitors and returns the complete public record for that company. Response fields include name, booths (array of stand numbers), logo_url, website_url, email, description, address (broken into street, zip_code, city, state, country), and phone numbers. The attributes array mirrors the classification block shown on the exhibitor page — covering dimensions such as Exhibitor Type, Organization Type, and Country — as a list of {name, values[]} objects. The documents array lists any published brochures or linked materials, each with name, url, description, and type.
Coverage and Scope
Both endpoints are fixed to the CPHI Milan 2026 event; they do not cover other CPHI editions or co-located events at the same venue. Data reflects what each exhibitor has published on their public directory profile — fields such as email, website_url, and description are null when the exhibitor has not filled them in.
The Cphieventplanner API is a managed, monitored endpoint for visitor.cphieventplanner.com — not a raw scraper you maintain. Every endpoint is automatically health-checked on a schedule, and when visitor.cphieventplanner.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 visitor.cphieventplanner.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 searchable internal database of CPHI Milan 2026 pharmaceutical suppliers using
list_exhibitorswith thesearchparameter. - Enrich a CRM with booth numbers, contact emails, and company addresses pulled from
get_exhibitorbefore the event. - Generate a pre-event briefing document by fetching exhibitor descriptions, attributes, and documents for a target list of companies.
- Map exhibitor categories by aggregating the
attributesfield across all pages to see the distribution of organization types and product segments. - Identify exhibitors that have published brochures by filtering
get_exhibitorresponses wheredocumentsis non-empty. - Track featured vs. standard exhibitors by segmenting on the
exhibitor_typefield returned inlist_exhibitors. - Compile a contact list of exhibitors with verified websites and emails by collecting non-null
website_urlandemailvalues across the full directory.
| 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.
Does visitor.cphieventplanner.com have an official developer API?+
How does pagination work in `list_exhibitors`?+
list_exhibitors returns at most 50 exhibitors per call. When has_more is true, the response includes a next_cursor string. Pass that string unchanged as the cursor parameter on your next request to retrieve the following page. When next_cursor is null, you have reached the last page. The total_count field tells you how many total records match across all pages.What classification data does `get_exhibitor` return in `attributes`?+
attributes array contains the structured classification block from the exhibitor's profile page. Each element has a name (e.g. "Exhibitor Type", "Organization Type", "Country") and a values array of strings. The exact attribute names and values depend on what the exhibitor has submitted; some profiles have more populated attributes than others.Does this API cover other CPHI events or editions beyond Milan 2026?+
Are floor plan coordinates or booth location maps available?+
booths array but does not include hall assignments, floor plan coordinates, or spatial map data. You can fork this API on Parse and revise it to add that data if the exhibitor profile page exposes it.