Philkotse API & Scraper
Philkotse.com is a car marketplace for the Philippines, and this API reads it as JSON.
🤖 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.
`search` takes the site's own filters: make and model, new or used, body type, transmission, colour, region and city, price, model year and mileage, sorted by best match, newest or price. Each row carries the listing id, title, year, transmission, mileage, location, price in pesos, the previous price when the seller cut it, the dealer's phone and an expired flag. `listing` returns one car in full: printed price, down payment, months and monthly payment, make, model, body type, colour, plate ending, every photo, the seller's description and feature list, and the seller block with name, phone, e-mail, address, certified and premium-dealer flags. On 2026-10-07 the site paged 1,818 used cars and 39 new ones.
What a Philkotse field actually contains
Fields that read differently from how they look. Every row was measured against live Philkotse pages on 2026-10-07.
| Field | What it holds |
|---|---|
| price_php vs previous_price_php | price_php is the asking price in Philippine pesos. previous_price_php is the struck-through price the seller cut from, shown on 3 of 86 search rows (one Cebu card: 300,000 now, 320,000 before). Search price, listing price and the listing page's own stored price agreed on 8 of 8 cars we checked, in two runs. |
| is_expired | Philkotse keeps showing some expired adverts. With no live used car in Cebu on 2026-10-07, the Cebu search returned 18 cards and all 18 were marked expired by the site, with no phone. We return them and flag each one, and the call carries expired_count. |
| total_pages | Philkotse publishes a page count, not a result count: 18 cars per full page. Used cars ran to 101 pages, new cars to 3. The site's own text and sidebar counters disagree with its pages (it says 1,878 used cars; its pages hold 1,818), so we do not repeat them. |
| downpayment_php, terms_months, monthly_payment_php | The financing block the seller filled in, on 6 of 8 sampled listings. A Honda City at 548,000 showed 94,000 down, 4 and 16,958 a month. Cars without financing show total_price_php instead. |
| plate_ending | The plate's last digits and the coding day as the seller published them, for example '1/2 - Monday'. On 5 of 8 sampled listings. |
| seller | Name, phone, e-mail, address, location, profile link, avatar, last login and the certified, verified-number and premium-dealer flags, exactly as printed on the listing page. Expired listings carry no phone. |
| related_dropped | When few cars match, Philkotse fills the page with unrelated 'related cars'. We cut them and count them here: a commercial-vehicle search had 5 matches and 18 fillers. |
Fuel type and engine size are not structured fields on Philkotse; when a seller states them, they are inside the description.
Real request and response JSON
Captured from the indexed primary action, search, on .
{
"method": "POST",
"url": "https://api.reefapi.com/philkotse/v1/search",
"headers": {
"x-api-key": "$REEF_KEY",
"content-type": "application/json"
},
"body": {
"make": "toyota",
"condition": "used",
"sort": "newest"
}
}{
"ok": true,
"meta": {
"api": "philkotse",
"endpoint": "search",
"mode": "live",
"latency_ms": 1764.9,
"record_count": 18,
"bytes": 208964,
"cache_hit": false,
"upstream_requests": 1,
"charged_credits": 2,
"version": "1.0.0",
"request_id": "84460054ae6d4103",
"queue_ms": 1.6,
"fetched_at": "2026-10-07T15:52:11.853Z"
},
"data": {
"source_url": "https://philkotse.com/used-toyota-for-sale",
"page": 1,
"total_pages": 23,
"has_more": true,
"sort": "newest",
"filters_applied": {
"condition": "used",
"make": "Toyota"
},
"related_dropped": 0,
"expired_count": 0,
"listings": [
{
"listing_id": 901333,
"url": "https://philkotse.com/toyota-tamaraw-for-sale-in-makati/2026-24-fx-mt-diesel-0935-600-3692-jan-ray-de-jesus-124k-all-in-dp-aid9013332",
"title": "2026 Toyota Tamaraw 2.4 FX M/T Diesel ☎️[redacted-phone] JAN RAY DE JESUS ✅️124K ALL-IN DP",
"condition": "used",
"year": 2026,
"transmission": "Manual",
"mileage_km": 6000,
"location": "Metro Manila, Makati",
"region": "Metro Manila",
"city": "Makati",
"price_php": 848000,
"previous_price_php": null,
"currency": "PHP",
"image": "https://img.philkotse.com/crop/270x152/2026/10/07/q0zvDh8H/received1136035579360465-d081.webp",
"services": [
"Financing",
"Warranty",
"Trade in"
],
"is_premium_dealer": true,
"is_expired": false,
"seller_id": 353743,
"seller_phone": "09356003692"
},
{
"listing_id": 901322,
"url": "https://philkotse.com/toyota-vios-13-xle-cvt-for-sale-in-makati/2025-at-gas-0935-600-3692-jan-ray-de-jesus-21k-all-in-dp-aid9013222",
"title": "2025 Toyota Vios 1.3 XLE CVT A/T Gas ☎️[redacted-phone] JAN RAY DE JESUS ✅️21K ALL-IN DP",
"condition": "used",
"year": 2025,
"transmission": "Automatic",
"mileage_km": 7000,
"location": "Metro Manila, Makati",
"region": "Metro Manila",
"city": "Makati",
"price_php": 668000,
"previous_price_php": null,
"currency": "PHP",
"image": "https://img.philkotse.com/crop/270x152/2026/10/07/q0zvDh8H/received29132135323050426-4d9f.webp",
"services": [
"Financing",
"Warranty",
"Trade in"
],
"is_premium_dealer": true,
"is_expired": false,
"seller_id": 353743,
"seller_phone": "09356003692"
},
{
"listing_id": 901314,
"url": "https://philkotse.com/toyota-tamaraw-for-sale-in-makati/2026-24-fx-aid9013142",
"title": "2026 Toyota Tamaraw 2.4 FX 🔥𝟬𝟵𝟯𝟴𝟰𝟱𝟴𝟴𝟳𝟳𝟵 𝐂𝐀𝐑𝐋 𝐁𝐎𝐍𝐍𝐄𝐕𝐈𝐄☎️ 🙋🏻♂️",
"condition": "used",
"year": 2026,
"transmission": "Manual",
"mileage_km": 6000,
"location": "Metro Manila, Makati",
"region": "Metro Manila",
"city": "Makati",
"price_php": 848000,
"previous_price_php": null,
"currency": "PHP",
"image": "https://img.philkotse.com/crop/270x152/2026/10/07/q0zvDh8H/7e44f31233440a21857852e51bfc12cb-313b.webp",
"services": [
"Financing",
"Trade in",
"Insurance"
],
"is_premium_dealer": true,
"is_expired": false,
"seller_id": 331089,
"seller_phone": "09384588779"
}
]
}
}What the Philkotse API does
| Action | Description | Concrete use case | Key params |
|---|---|---|---|
| search | Search Philkotse.com, the Philippines' car marketplace: used and brand-new cars from dealers and private sellers. Filter by make, model, condition, body type, transmission, colour, region and city, price, model year and mileage; sort by best match, newest or price. Nothing is required: no parameters browses every car on the site. | Price-intelligence teams call search to search Philkotse.com, the Philippines' car marketplace. | make, model, condition, body_type, transmission, ... |
| listing | One Philkotse car listing in full: price and previous price, financing terms (down payment, months, monthly), make, model, year, body type, colour, transmission, mileage, plate ending, every photo, the seller's description and feature list, and the seller block — name, phone, e-mail, address, location, certified / premium-dealer flags and profile link. | Classifieds aggregators call listing to get one Philkotse car listing in full. | listing_id, url, include_pii |
| models | Every model Philkotse knows for one make, with the slug `search` accepts. | Resale and arbitrage tools call models to get every model Philkotse knows for one make, with the slug `search` accepts.. | make, active_only |
| cities | The cities of one Philippine region, with the slug `search` accepts. | Lead-generation teams call cities to get the cities of one Philippine region, with the slug `search` accepts.. | region |
| filters | The site's own filter values: 103 makes, 82 regions, 10 body types, 5 transmissions and 20 colours, with the slugs `search` accepts. | Price-intelligence teams call filters to get the site's own filter values. | kind |
Call search from your stack
curl -X POST https://api.reefapi.com/philkotse/v1/search \
-H "x-api-key: $REEF_KEY" \
-H "content-type: application/json" \
-d '{"make":"toyota","condition":"used","sort":"newest"}'import requests
r = requests.post(
"https://api.reefapi.com/philkotse/v1/search",
headers={"x-api-key": REEF_KEY},
json={
"make": "toyota",
"condition": "used",
"sort": "newest"
},
)
print(r.json()["data"])const res = await fetch("https://api.reefapi.com/philkotse/v1/search", {
method: "POST",
headers: {
"x-api-key": process.env.REEF_KEY,
"content-type": "application/json",
},
body: JSON.stringify({
"make": "toyota",
"condition": "used",
"sort": "newest"
}),
});
const { ok, data, meta, error } = await res.json();Ask your MCP-connected assistant: call reefapi.philkotse.search with {"make":"toyota","condition":"used","sort":"newest"}.Who uses this API and why
- Track Philippine used-car prices by make, model, year and mileage, with the previous price when sellers cut it.
- Build a dealer lead list for Metro Manila: filter by region and city and keep each seller's name, phone, e-mail and address.
- Watch new-car stock at importers and dealers with condition=new and newest first.
- Compare financing offers: down payment, months and monthly payment per listing.
- Monitor one model across regions, for example a Toyota Vios in Metro Manila against Pampanga.
Questions developers ask before integrating
Do I need a Philkotse account or a Philippine IP?
No. Every endpoint reads public pages without an account, and you call reefapi.com from anywhere.
Which filters can I combine?
All of them: make, model, new or used, body type, transmission, colour, region, city, price range, year range and mileage range, in one call. Measured on 2026-10-07 against 101 pages of used cars: Toyota 23 pages, Honda City 4, pickups 7, under 500,000 pesos 12, 2020 or newer with at most 30,000 km 43, Makati 90.
What happens if I misspell a make, model or city?
You get an INVALID_PARAM error, not a wider search. Philkotse quietly drops a filter it does not recognise and shows every car instead; we stop that. The models and cities endpoints give the exact slugs.
How do I get the dealer's phone number?
Search rows already carry the seller's phone on live listings (86 of 86 in our sample). listing adds the seller's name, e-mail, address, profile link and certified and premium-dealer flags.
Can I sort by newest or by price?
Yes: relevance (the site default), newest, price_asc and price_desc. Newest returned Toyota ids 901333, 901322, 901314 in that order; price_asc on used pickups started at 167,000 pesos.
How deep can I page?
To the last page Philkotse publishes; total_pages tells you how many. Asking beyond it returns an empty page with has_more false, never a repeat.
Are new cars included?
Yes, set condition=new. On 2026-10-07 Philkotse listed 39 brand-new cars from dealers, for example a 2027 INEOS Grenadier at 16,980,000 pesos. New cars carry no mileage.
What does an expired listing return?
The last published version with is_expired true. A listing id that never existed returns NOT_FOUND.
What is the Philkotse API?
Philkotse API is a ReefAPI endpoint group for philippine car listings from philkotse.com: used and new cars in pesos, financing terms and the dealer's contact block. It returns live JSON through POST requests under /philkotse/v1.
Is the Philkotse API free to try?
Yes. ReefAPI starts with 1,000 free credits, no card required. Philkotse calls use the same shared credit balance as every other ReefAPI engine.
Do I need a Philkotse login or account?
No login to Philkotse 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 Philkotse 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 Philkotse API use?
Philkotse actions currently cost 1-2 credits per successful call. Failed or blocked calls are free. All APIs draw from one credit pool.
Can I call Philkotse from an AI assistant or MCP client?
Yes. Connect ReefAPI once through MCP and your assistant can call philkotse actions with the same key, credit pool and JSON envelope used by normal REST requests.