Pepper APIpepper.pl ↗
Access deals, coupons, categories, and comments from Pepper.pl via 7 structured endpoints. Filter by tab, category, or keyword. Returns prices, temperatures, and more.
What is the Pepper API?
The Pepper.pl API exposes 7 endpoints covering deals, coupons, categories, and comments from Poland's largest community deal-sharing platform. Use get_deals to pull paginated deal listings sorted by popularity, heat, or recency, and get_deal_detail to retrieve full metadata on a single offer — including price, expiry status, poster username, and Unix timestamp.
curl -X GET 'https://api.parse.bot/scraper/9eacfa6c-8d1d-4d75-b41c-faaf66d63eb1/get_deals?tab=popularne&page=1' \ -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 pepper-pl-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: pepper.pl SDK — browse deals, search, explore categories and comments."""
from parse_apis.pepper_pl_deals_api import Pepper, Tab, DealNotFound
client = Pepper()
# List hot deals with the Tab enum, capped at 5 items.
for deal in client.deals.list(tab=Tab.GORACE, limit=5):
print(deal.title, deal.temperature, deal.store)
# Search for deals by keyword — take the first result.
deal = client.deals.search(query="laptop", limit=1).first()
if deal:
print(deal.title, deal.price, deal.original_price)
# Fetch full detail by slug.
detail = client.deals.get(slug=deal.slug)
print(detail.description[:100], detail.external_url)
# Drill into comments on that deal via its sub-resource.
for comment in detail.comments.list(limit=3):
print(comment.user, comment.text[:80], comment.reply_count)
# Browse categories and list deals in the first one.
category = client.categories.list(limit=1).first()
if category:
print(category.name, category.slug)
for cat_deal in category.deals(limit=3):
print(cat_deal.title, cat_deal.price, cat_deal.is_expired)
# List active coupons.
for coupon in client.coupons.list(limit=5):
print(coupon.title, coupon.merchant, coupon.code, coupon.discount)
# Typed error handling: catch DealNotFound for a nonexistent slug.
try:
client.deals.get(slug="nonexistent-deal-999999999")
except DealNotFound as exc:
print(f"Deal not found: {exc.slug}")
print("exercised: deals.list / deals.search / deals.get / comments.list / categories.list / category.deals / coupons.list / DealNotFound")
Fetch a paginated list of deals from the pepper.pl homepage. Supports sorting by tab: popularne (popular, default), najgoretsze (hottest ever), gorace (hot now), nowe (new). Each page returns up to ~20 deals. Paginate by incrementing the page number until an empty array is returned.
| Param | Type | Description |
|---|---|---|
| tab | string | Sort tab for the deal listing. |
| page | integer | Page number for pagination. |
{
"type": "object",
"fields": {
"deals": "array of deal objects with id, slug, title, description, price, original_price, store, deal_url, external_url, temperature, comment_count, image_url, posted_time, username, is_expired"
},
"sample": {
"data": {
"deals": [
{
"id": "1295203",
"slug": "zbiorcza-okazja-na-zestawy-3-walizek-z-polikarbonu-za-49679-zl-z-polipropylenu-za-41279-zl-z-abs-u-za-29379-zl-at-wittchen-1295203",
"price": 496.79,
"store": "Wittchen",
"title": "Zbiorcza okazja na zestawy 3 walizek",
"deal_url": "https://www.pepper.pl/promocje/zbiorcza-okazja-na-zestawy-3-walizek-z-polikarbonu-za-49679-zl-z-polipropylenu-za-41279-zl-z-abs-u-za-29379-zl-at-wittchen-1295203",
"username": "Mvzaniaa",
"image_url": "https://static.pepper.pl/threads/raw/4eExg/re/300x300/qt/60/1295203_1.jpg",
"is_expired": false,
"description": "",
"posted_time": 1781098040,
"temperature": 280.28,
"external_url": "",
"comment_count": 8,
"original_price": 1629.7
}
]
},
"status": "success"
}
}About the Pepper API
Deal Discovery and Filtering
get_deals returns a paginated array of deal objects from the Pepper.pl homepage. The tab parameter accepts four values — popularne, najgoretsze, gorace, and nowe — corresponding to the site's sorting views. Each deal object includes id, title, description, price, original_price, store, deal_url, external_url, temperature, and comment_count. The temperature field reflects community voting and is a reliable proxy for deal popularity. get_deals_by_category accepts a slug parameter (e.g. elektronika, sport) to scope results to a single category; use get_categories first to enumerate available category slugs.
Deal Detail and Search
get_deal_detail takes a slug in the format deal-name-123456 and returns the full record for one deal, including is_expired (boolean), posted_time (Unix timestamp), image_url, and the poster's username. The price field may be null for free or ambiguously priced offers. search_deals accepts a required query string and an optional page integer, returning the same deal object shape as the homepage listing endpoints, making it straightforward to integrate keyword-driven deal retrieval into price-alert or comparison tools.
Coupons and Comments
get_coupons returns active promotional codes from the Pepper.pl coupons section. Each coupon object carries title, merchant, code, type, discount, expiration, is_exclusive, and is_expired — enough to power a coupon aggregator or browser extension. get_deal_comments fetches threaded user comments for any deal, identified by its numeric thread_id (the id field from deal listing responses). Each comment object includes id, user, text, created_at, and reply_count. Pagination is supported via the page parameter.
The Pepper API is a managed, monitored endpoint for pepper.pl — not a raw scraper you maintain. Every endpoint is automatically health-checked on a schedule, and when pepper.pl 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 pepper.pl 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 price-drop alert system using
get_dealswith thegoracetab to surface newly hot deals in real time. - Populate a Polish-language coupon aggregator with merchant codes, discount amounts, and expiry dates from
get_coupons. - Track community sentiment on deals by monitoring
temperatureandcomment_countfields across paginated results. - Power a product research tool that uses
search_dealswith keyword queries to find current prices and original prices side by side. - Filter deal feeds by category slug (e.g.
elektronika) viaget_deals_by_categoryfor niche deal newsletters. - Archive deal metadata including
posted_timeandis_expiredfromget_deal_detailfor historical price trend analysis. - Display user discussion threads in a deal companion app using
get_deal_commentswith paginated reply counts.
| 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 Pepper.pl have an official developer API?+
What does the `temperature` field represent in deal results?+
temperature field is a numeric score derived from community upvotes and downvotes on a deal. Higher values indicate stronger community approval. It is present in all deal listing responses from get_deals, search_deals, and get_deals_by_category.Can I retrieve user profiles or voting history for specific Pepper.pl members?+
Does `get_deal_detail` always return a price?+
price field is typed as number or null. Deals listed as free, or where the price is not determinable from the deal post, will return null. The original_price field in listing endpoints follows the same nullable pattern, so null-checking is necessary before any price comparison logic.