Kenya PPB Registered Products (Medicines, Devices) avatar

Kenya PPB Registered Products (Medicines, Devices)

Pricing

from $1.00 / 1,000 product registrations

Go to Apify Store
Kenya PPB Registered Products (Medicines, Devices)

Kenya PPB Registered Products (Medicines, Devices)

Kenya Pharmacy and Poisons Board public registers as English-keyed JSON: registered medicines, food supplements, medical devices and herbals with registration number, product, active ingredients, form, country, holder, local representative and ISO registration and expiry dates.

Pricing

from $1.00 / 1,000 product registrations

Rating

0.0

(0)

Developer

Aloever Dulay

Aloever Dulay

Maintained by Community

Actor stats

0

Bookmarked

3

Total users

0

Monthly active users

16 days ago

Last modified

Categories

Security

Limited permissions

Share

Kenya PPB Registered Products Actor (Medicines, Food, Devices, Herbals)

The public product registers of the Pharmacy and Poisons Board (PPB) of Kenya, read from products.pharmacyboardkenya.org, as clean, English-keyed JSON: registration number, product name, active ingredients, dosage form, country of origin, marketing authorisation holder, local technical representative or manufacturer, and ISO registration and expiry dates.

Four registers, about 17,300 rows on 2026-10-11:

listRegisterRows
medicinesRegistered medicines (the retention register)3,273
foodFood supplements and nutritional products12,754
devicesRetained medical devices (the 2026 retention list)1,246
herbalsRegistered herbal products21

Who needs this

  • Pharmacies, distributors, importers and e-pharmacies checking that a product is registered in Kenya, who holds the registration and when it expires.
  • Pharmaceutical and device companies and their local technical representatives watching new registrations, competitors' portfolios and upcoming expiries.
  • Hospitals, insurers, procurement and tender teams verifying products and suppliers against the regulator's register.
  • Regulatory-affairs consultants, researchers and journalists studying what is registered in Kenya, from which countries and by which companies.
  • AI agents and automations that need a stable schema instead of a paged admin grid.

Input

FieldTypeDefaultDescription
liststring"medicines"medicines, food, devices or herbals.
productNamestring""Trade name contains this text, any case (panadol, oximeter).
activeIngredientstring""Active ingredient column contains this text (cefixime). Medicines and food.
registrationNumberstring""Registration number contains this text (H2026/CTD13447, MD/2026/001). Medicines and devices.
companystring""Part of a company name: holder or local technical representative (medicines), holder or manufacturing site (food), manufacturer or local representative (devices), manufacturer (herbals).
countrystring""Country of origin contains this text (India). Medicines, food and herbals.
registeredSincestring""Registered on or after this date (YYYY-MM-DD). Devices and herbals publish only a year, so that whole year matches. Not food.
expiringBeforestring""Medicines whose registration expires before this date (YYYY-MM-DD).
maxItemsinteger100Stop after this many rows (1-20,000).
proxyConfigurationobjectno proxyOptional Apify Proxy, if the site is unreachable from Apify's network.

Filters combine with AND. The site's search takes one text per request, so the actor sends it the most selective filter (registration number, then product name, ingredient, company, country) and checks the others on each row it reads. A filter the chosen register does not publish (for example activeIngredient on devices) stops the run with a clear message instead of returning nothing.

Order. Medicines come newest registration first. With expiringBefore and no registeredSince, they come soonest expiry first. Food, devices and herbals come in the register's own record order, highest record ID (newest record) first.

Date filters stop early. The actor reads medicines one registration year at a time, newest first, so registeredSince: "2025-07-01" reads 2026 and 2025 and stops; and one expiry year at a time for expiringBefore. A whole register fits in the default 300-second run timeout.

Output

One dataset item per register row. Keys are English and shared across registers where they mean the same thing; a register's items leave out the fields it does not publish. Names are kept exactly as the register prints them (HTML entities decoded, whitespace tidied), dates are ISO (YYYY-MM-DD), years are numbers. The Output tab on this page documents every field, with one table view per register.

A real medicines item (2026-10-11):

{
"list": "medicines",
"registrationNumber": "H2026/CTD13447/29671",
"productName": "ACECOR GEL",
"activeIngredients": ["ACECLOFENAC"],
"dosageForm": "Gel",
"countryOfOrigin": "India",
"localOrForeign": "Foreign",
"marketingAuthorizationHolder": "SIGNATURE HEALTHCARE LIMITED",
"localTechnicalRepresentative": "SIGNATURE HEALTHCARE LTD",
"registeredAt": "2026-09-29",
"expiresAt": "2031-09-29",
"sourceUrl": "https://products.pharmacyboardkenya.org/ppb_admin/pages/public_view_retention_products.php",
"fetchedAt": "2026-10-11T22:35:13.238Z"
}

A real food item:

{
"list": "food",
"sourceId": "15080",
"productName": "Fitfizz Immuno D",
"activeIngredients": ["Vitamin C", "Zinc", "Vitamin D3"],
"strength": "Vitamin C 1000 mg + Zinc 10 mg 400 IU",
"dosageForm": "Effervescent Tablet",
"route": "Oral",
"countryOfOrigin": "India",
"localOrForeign": "Foreign",
"marketingAuthorizationHolder": "MAXIM PHARMACEUTICALS LIMITED",
"manufacturer": "VITAEGISS WELLNESS PVT. LTD",
"humanOrVet": "Human",
"applicationType": "New/Innovator",
"packaging": "1 Tube of 20 Effervescent Tablets",
"shelfLife": null,
"approved": true,
"sourceUrl": "https://products.pharmacyboardkenya.org/ppb_admin/pages/public_view_food.php",
"fetchedAt": "2026-10-11T22:35:40.694Z"
}

A real medical device item:

{
"list": "devices",
"sourceId": "21227",
"registrationNumber": "MD/2026/001",
"productName": "PULSE OXIMETER",
"manufacturer": "SHENZHEN MINDRAY BIO-MEDICAL ELECTRONICS CO., LTD",
"localTechnicalRepresentative": "MEDIGLOBE SOLUTIONS LIMITED",
"registrationYear": 2026,
"retentionYear": 2026,
"licenceStatus": "VALID",
"sourceUrl": "https://products.pharmacyboardkenya.org/ppb_admin/pages/public_view_md_retained.php",
"fetchedAt": "2026-10-11T22:35:27.147Z"
}

A real herbal item:

{
"list": "herbals",
"sourceId": "153",
"productName": "EUGICA IVY SYRUP",
"countryOfOrigin": "THAILAND",
"manufacturer": "MEGA LIFESCIENCEC PUBLIC COMPANY LIMITED",
"registrationYear": 2024,
"sourceUrl": "https://products.pharmacyboardkenya.org/ppb_admin/pages/public_view_herbal.php",
"fetchedAt": "2026-10-11T22:36:34.485Z"
}

Notes on the fields:

  • Active ingredients are the register's "Inn Of Api" text split at commas, semicolons, +, & and the word "and". Food rows often leave it blank ([]).
  • Cut values. The register itself cuts long text at about 50 characters and marks it with … (for example "KETOCONAZOLE 2%, ZINC PYRITHIONE 1% & ALOE VERA…"). The actor keeps the mark, so you can see where text is incomplete.
  • sourceUrl is the register's public page. Its rows load through a form the page posts, so the link opens the register, not the row.

Pricing

Pay per event:

EventCharged for
product-recordEach register row stored in the dataset.

Apify's standard run-start event covers starting the actor. Rows are stored first and charged after, so you never pay for data you did not receive. When your spending limit runs out, the run stops cleanly and never stores an unpaid row.

Data source and politeness

  • Source: the Pharmacy and Poisons Board's public register pages under https://products.pharmacyboardkenya.org/ppb_admin/pages/ (public_view_retention_products.php, public_view_food.php, public_view_md_retained.php, public_view_herbal.php), linked from the Board's website. Each is a data grid; the actor loads the page, then asks the grid for rows the way the page's own buttons do (up to 1,000 rows per request), sending back the one-time key each answer carries. No login, no captcha. TLS certificates are always verified.
  • robots.txt: the register host has none; the Board's main site (web.pharmacyboardkenya.org) disallows only /wp-admin/. The actor still
    • waits at least 1.5 seconds after each request ends before the next one starts (retries and session renewals included; a constant, not an input),
    • uses one connection, one request at a time,
    • identifies itself honestly as ke-ppb-actor/0.1 (+https://apify.com/a-g-d/ke-ppb),
    • asks only for the rows it needs: 20 newest medicines take 4 requests.
  • Measured on 2026-10-11: 20 newest medicines in 8 s (4 requests); 200 in 7 s; the whole medicines register (3,273) in 17 s (9 requests, 165 KB on the wire); 100 food rows in 3 s (2 requests); the whole food register (12,754) in 36 s (14 requests, about 85 KB per 1,000-row page); 300 devices in 4 s.
  • Resilience: connection errors, timeouts, HTTP 5xx and 429, and answers that are not a register grid are retried with exponential backoff and jitter inside a run-wide budget (90 s of backoff). If the grid's key or session expires, the actor reloads the page once and repeats the same request; a second refusal, an HTTP 403/404, a challenge page or a changed grid layout stops the run with a clear message rather than working around it.
  • Terms: the Board's terms page carries a disclaimer, a cookie and server-log notice and "Copyright © 2026 Pharmacy and Poisons Board. All Rights Reserved."; nothing about automated access. The registers are published so the public can check products. Check the Board's terms for your own use of the data.

Data and privacy

The registers publish product and company data: registered products, the companies that hold, make or represent them, and dates. The actor outputs only the fields listed above.

  • Company fields are output as the register publishes them, but without addresses or contact details. In the food register (230 of 12,754 rows on 2026-10-11) and a few medicines (77) and device (17) rows, a company column carries the company's postal or street address after its name ("Four Life Research Africa Limited P.O Box 23433…", "LABOREX KENYA LTD-MOMBASA ROAD"). The actor keeps the name and drops the address; a value that is only an address becomes null. Any e-mail address or phone number is dropped the same way (none appeared on 2026-10-11), and free-text fields (strength, packaging) that contain one become null.
  • The food register's "Visual Description" (what the product looks like) is not collected.
  • People named as companies. The register sometimes names a natural person as marketing authorisation holder (an individual is listed as holder of a cream made in India). The actor outputs the name as the regulator publishes it on its public register. Kenya's Data Protection Act, 2019 applies to personal data you store: use the data for the purpose it is published for, checking products and their registrations.

Limitations

  • Cut text. Long names, ingredients and company names arrive cut at about 50 characters (see Output). The site's search sees the full value, so a search still finds text beyond the cut, but other filters checked by the actor see only the shown part.
  • No detail pages. The registers have no per-product page the actor could read (the food grid's "view" button is one request per row and is not used), so the fields are the grid's columns.
  • Food has no dates; devices and herbals have only years. registeredSince and expiringBefore say which registers they apply to.
  • Which products are listed is the register's choice. The medicines list is the retention register (currently valid registrations, 2021-2026 on 2026-10-11); the device list is the 2026 retention list.
  • A run is a snapshot. Rows added while a long run pages through a register belong to the next run; a row seen twice is stored once.
  • Search wildcards. The site's search treats % and _ as wildcards; when your text contains them, the actor checks the rows itself.