Kilimall API & Scraper
Kilimall is an online marketplace in Kenya (kilimall.co.ke) and Uganda (kilimall.ug) where Kilimall and thousands of marketplace stores, local and overseas, sell electronics, phones, home goods and fashion.
🤖 Using an AI assistant? Copy this link into ChatGPT / Claude / Cursor — it reads every endpoint and parameter instantly and tells you if this API fits your use case.
This API reads it as JSON for either country. `search` takes a keyword, a category or a department, with filters for brand, price range, delivery type (Fulfilled by Kilimall, overseas shipment, local dispatch), ships-from country and brand-store badge, sorted by best match, price, top sales or newest, up to 100 listings per page. Each row carries the listing id, title, URL, image, the lowest and highest variant price in Kenyan or Ugandan shillings, the list-price range, rating and review count and the delivery tags. `product` returns one listing in full: the price the page shows (including a running promotion and its end date), the sale and list price, stock as the site shows it plus the Kilimall-warehouse, overseas and seller stock, every variant with its own price and stock, the town it ships from, warranty, exchange and return days, store vouchers, specifications, category path, images, the star histogram and the store with its rating and followers. `reviews` returns the customer reviews with product, delivery and service scores, photos, the variant bought and the seller's reply, `store` a marketplace store and its listings, and `categories` the departments and the category ids search accepts.
What a Kilimall field actually contains
Fields that read differently from how they look. Every row was measured against live responses on 2026-10-15.
| Field | What it holds |
|---|---|
| price (search row) | The lowest price among the listing's variants, already including a running promotion. price_max is the highest variant price. list_price_min and list_price_max are the range of crossed-out prices over the variants and need not belong to the same variant, so no discount is computed on a search row. |
| price, regular_sale_price, list_price, promotion (product) | price is what the listing page shows for the default variant: the promotion price while a promotion runs, otherwise the sale price. regular_sale_price is the sale price without the promotion, list_price the crossed-out price. promotion holds the promotion price and its start and end time. |
| stock_quantity, stock_status | The quantity the page uses for In Stock / Low Stock (5 or fewer) / Out of Stock. stock_kilimall_warehouse, stock_overseas and stock_seller are the three stock sources the site reads; the overseas figure can be in the thousands for a listing whose Kilimall warehouse holds a handful. |
| fulfilment, ships_from | kilimall = Fulfilled by Kilimall from a Kilimall warehouse, overseas = Oversea Shipment, local = Local Dispatch by the seller. ships_from is the town the site names (for example Mavoko). Delivery fees and delivery days depend on the buyer's address and are not returned. |
| rating, review_count | The listing's average stars and the number of reviews. A search row's rating is null when the listing has no review yet; the site itself prints 5.0 there. |
| store | The marketplace store: name, Brand Official or Brand Authorized badge, store rating and review count, followers, number of products and the shipping address the store states. |
| total, total_capped | The site's own count of matching listings. It stops at 10,000 (total_capped is then true) and the site serves only the first 10,000 results of a search, so last_page never goes past them. |
Prices were compared with each listing's own page on kilimall.co.ke for 17 listings in 9 searches: product price matched 17 of 17. A search row price matched the product price on 15 of 16; the other listing has a cheaper variant than the default one, which is what the row shows.
Real request and response JSON
Captured from the indexed primary action, search, on .
{
"method": "POST",
"url": "https://api.reefapi.com/kilimall/v1/search",
"headers": {
"x-api-key": "$REEF_KEY",
"content-type": "application/json"
},
"body": {
"query": "iphone"
}
}{
"ok": true,
"meta": {
"api": "kilimall",
"endpoint": "search",
"mode": "live",
"latency_ms": 4285.4,
"record_count": 36,
"bytes": 34577,
"cache_hit": false,
"upstream_requests": 1,
"total": 952,
"charged_credits": 2,
"version": "0.1.0",
"request_id": "de453f0b0868464c",
"queue_ms": 2.1,
"fetched_at": "2026-10-15T17:02:57.780Z"
},
"data": {
"results": [
{
"listing_id": "1001816391",
"sku_id": "10005710505",
"title": "Refurbished smartphone iphone 7 128GB+2GB 12M+7MP 4.7 inch256G/128G/32G apple with fingerprint iphone7 Already unlocked - globally available Support WhatsApp",
"short_title": "Apple iPhone 7 Refurbished Smartphone 4.7-inch 128GB Unlocked",
"url": "https://www.kilimall.co.ke/listing/1001816391",
"image": "https://img.kilimall.com/gallery/store/100012240/202606/c4a672d6e6654adc9e783ec298141101.jpg?x-image-process=image/format,webp/resize,w_360",
"currency": "KES",
"price": 8400,
"price_max": 10900,
"list_price_min": 18999,
"list_price_max": 19999,
"rating": 4.39,
"review_count": 18,
"rating_scale": 5,
"fulfilment": [
"kilimall"
],
"delivery_tags": [
"Fulfilled By Kilimall"
],
"store_badge": "none",
"big_discount_sale": false,
"tags": null,
"highlights": null
},
{
"listing_id": "1001660220",
"sku_id": "10006356007",
"title": "Refurbished Apple iPhone 11 Pro 512G/256G/64G Premium Smartphone with Triple-Camera System and A13 Bionic Performance No facial recognition involved.",
"short_title": "Apple iPhone 11 Pro Refurbished Smartphone with Triple-Camera System and A13 Bionic",
"url": "https://www.kilimall.co.ke/listing/1001660220",
"image": "https://img.kilimall.com/gallery/store/100010954/202606/6c72295ba3a0403ca50595c16df16813.jpg?x-image-process=image/format,webp/resize,w_360",
"currency": "KES",
"price": 22999,
"price_max": 38999,
"list_price_min": 34999,
"list_price_max": 299999,
"rating": 4.35,
"review_count": 31,
"rating_scale": 5,
"fulfilment": [
"kilimall"
],
"delivery_tags": [
"Fulfilled By Kilimall"
],
"store_badge": "none",
"big_discount_sale": false,
"tags": null,
"highlights": null
},
{
"listing_id": "1001649163",
"sku_id": "10006851013",
"title": "Refurbished smartphone iphone 7 128GB+2GB 12M+7MP 4.7 inch256G/128G/32G apple with fingerprint iphone7 Already unlocked - globally available Support WhatsApp",
"short_title": "Apple iPhone 7 Refurbished 4.7-inch Smartphone with Fingerprint Sensor",
"url": "https://www.kilimall.co.ke/listing/1001649163",
"image": "https://img.kilimall.com/gallery/store/100010954/202606/6051a6f987e34e80ada5a2ce9b71bfcd.jpg?x-image-process=image/format,webp/resize,w_360",
"currency": "KES",
"price": 8499,
"price_max": 12999,
"list_price_min": 11999,
"list_price_max": 19999,
"rating": 4.64,
"review_count": 14,
"rating_scale": 5,
"fulfilment": [
"kilimall"
],
"delivery_tags": [
"Fulfilled By Kilimall"
],
"store_badge": "none",
"big_discount_sale": false,
"tags": null,
"highlights": null
}
],
"total": 952,
"total_capped": false,
"page": 1,
"page_size": 36,
"last_page": 27,
"has_more": true,
"country": "KE",
"currency": "KES",
"query": "iphone",
"sort": "relevance",
"filters_applied": {}
}
}What the Kilimall API does
| Action | Description | Concrete use case | Key params |
|---|---|---|---|
| search | Search Kilimall (Kenya kilimall.co.ke or Uganda kilimall.ug) by keyword and/or category, department or brand, with a price range, fulfilment (Fulfilled by Kilimall / overseas shipment / local dispatch), ships-from country and store badge filters, sorted by relevance, price, top sales or newest. Each row: listing id, title, URL, image, lowest and highest variant price, list-price range, rating and review count, fulfilment tags, store badge (brand_official / brand_authorized / none). Plus the source's total (capped at 10,000). One of `query`, `category_id` or `department_id` is required. | Pricing teams call search to search Kilimall (Kenya kilimall.co.ke or Uganda kilimall.ug) by keyword and/or category, depa…. | query, category_id, department_id, brand, min_price, ... |
| product | Full record of one Kilimall listing: title, price in KES / UGX (the live promotion price when one runs, with its window), sale and list price, discount, stock as the site shows it plus the Kilimall-warehouse / overseas / seller stock, every variant with its own price and stock, fulfilment and ships-from town, warranty / exchange / return days, store vouchers, specifications, category path, images, video, rating histogram and the store with its rating and followers. | Marketplace operators call product to get full record of one Kilimall listing. | listing_id |
| reviews | Customer reviews of one Kilimall listing: product, delivery and service score, review text, photos, the variant bought and its price, reviewer name as the site shows it ('Anonymous User' for reviewers who chose anonymity), date, likes and the seller's reply. Paged, with the source's total. | Catalog enrichment teams call reviews to get customer reviews of one Kilimall listing. | listing_id, sort, page, page_size, country |
| store | A Kilimall marketplace store: name, badge (brand official / authorised), rating and review count, followers, number of products, shipping address as the store states it, plus one page of the store's listings (same row shape as search), optionally searched and sorted. | Retail analysts call store to get a Kilimall marketplace store. | store_id, query, sort, country, page, ... |
| categories | Kilimall's departments (id, name) as the site's menu lists them; with `department_id`, the categories the source lists under that department (id, name) — those ids work in search `category_id`. | Pricing teams call categories to get kilimall's departments (id, name) as the site's menu lists them; with `department_id`, the ca…. | department_id, country |
Call search from your stack
curl -X POST https://api.reefapi.com/kilimall/v1/search \
-H "x-api-key: $REEF_KEY" \
-H "content-type: application/json" \
-d '{"query":"iphone"}'import requests
r = requests.post(
"https://api.reefapi.com/kilimall/v1/search",
headers={"x-api-key": REEF_KEY},
json={
"query": "iphone"
},
)
print(r.json()["data"])const res = await fetch("https://api.reefapi.com/kilimall/v1/search", {
method: "POST",
headers: {
"x-api-key": process.env.REEF_KEY,
"content-type": "application/json",
},
body: JSON.stringify({
"query": "iphone"
}),
});
const { ok, data, meta, error } = await res.json();Ask your MCP-connected assistant: call reefapi.kilimall.search with {"query":"iphone"}.Who uses this API and why
- Track Kilimall prices and promotions in Kenyan shillings daily for a product list.
- Compare Kilimall and Jumia prices for the same products in Kenya.
- Find listings Fulfilled by Kilimall in a category, cheapest first.
- Monitor a marketplace store's catalogue, rating and followers.
- Collect product reviews and ratings for East African consumer research.
Questions developers ask before integrating
Which countries and currencies?
Kenya (country=KE, kilimall.co.ke, prices in KES) and Uganda (country=UG, kilimall.ug, prices in UGX). The two sites have different catalogues: iphone returned 952 listings in Kenya and 17 in Uganda on the same day.
Do I need a Kilimall account?
No. Prices, stock, stores, ratings and reviews are read logged out.
Which filters are there and do they work?
Category, department, brand, price range, delivery type, ships-from country and store badge. Each was checked against the unfiltered count in the same run: iphone 952 → Fulfilled by Kilimall 20, overseas shipment 402, local dispatch 530; 5,000 to 20,000 KES 237; Refurbished Phones category 608; ships from China 410; brand official stores 11.
Is the promotion price included?
Yes. When a promotion runs, product.price is the promotion price the page shows and promotion gives its start and end; the normal sale price stays in regular_sale_price. Search rows already show the promotion price.
How deep can I page?
Up to the first 10,000 results of a search, which is the site's own limit; for most keywords that is every result (iphone has 952). Up to 100 listings per page.
Is the delivery fee included?
No. Kilimall works out the delivery fee and delivery days from the buyer's address at checkout. The API returns the delivery type and the town the item ships from.
How do I find category ids?
categories lists Kilimall's departments; categories with a department_id lists the categories under it with the ids search accepts. Every product also returns its category path.
What is the Kilimall API?
Kilimall API is a ReefAPI endpoint group for kenya and uganda marketplace: shilling prices with list price and promotions, stock, fulfilled by kilimall or overseas shipment, stores and reviews. It returns live JSON through POST requests under /kilimall/v1.
Is the Kilimall API free to try?
Yes. ReefAPI starts with 1,000 free credits, no card required. Kilimall calls use the same shared credit balance as every other ReefAPI engine.
Do I need a Kilimall login or account?
No login to Kilimall is needed for the API response. You call ReefAPI with your x-api-key header, and the playground can run live examples before you create a production key.
How fresh is the Kilimall data?
The page example is captured from a live search call, and production requests fetch live data through ReefAPI rather than a static sample.
How many credits does the Kilimall API use?
Kilimall actions currently cost 2-3 credits per successful call. Failed or blocked calls are free. All APIs draw from one credit pool.
Can I call Kilimall from an AI assistant or MCP client?
Yes. Connect ReefAPI once through MCP and your assistant can call kilimall actions with the same key, credit pool and JSON envelope used by normal REST requests.
Is the Kilimall API a Kilimall scraper?
It is the managed alternative to a DIY Kilimall scraper. Instead of building and maintaining your own scraper — proxies, headless browsers, captcha and constant breakage — you call one ReefAPI endpoint and get the same kenya and uganda marketplace: shilling prices with list price and promotions, stock, fulfilled by kilimall or overseas shipment, stores and reviews back as clean JSON.