Shafa APIshafa.ua ↗
Access shafa.ua product listings, seller profiles, reviews, and category data via a structured API. Filter by brand, size, price, and condition.
What is the Shafa API?
The Shafa.ua API provides access to Ukraine's largest second-hand fashion marketplace through 9 endpoints covering product listings, seller profiles, reviews, and the full category tree. browse_listings lets you filter by brand, size, color, condition, and price range, while get_seller_profile returns rating, sold count, follower count, and city — enough to build pricing tools or inventory monitors for the Ukrainian resale market.
No input parameters required.
curl -X GET 'https://api.parse.bot/scraper/d678e98e-42d2-40de-ae78-6b2a486e6ad5/get_categories' \ -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 shafa-ua-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: shafa.ua SDK — browse, search, and analyze sellers on Ukraine's marketplace."""
from parse_apis.shafa_ua_api import Shafa, Sort, ParentSlug, NotFound
client = Shafa()
# Browse newest women's listings with price cap, iterate with a limit.
for listing in client.listings.browse(catalog_slug=ParentSlug.WOMEN, order_by=Sort.NEW, price_to=5000, limit=3):
print(listing.name, listing.price, listing.isNew)
# Search by keyword — take one item, get its full details.
listing = client.listings.search(query="nike", limit=1).first()
if listing:
detail = listing.details()
print(detail.name, detail.description[:80], detail.offers.price)
# Fetch a seller profile by username, then browse their listings and reviews.
try:
seller = client.sellers.get(username="marfessa")
print(seller.firstName, seller.sellerRating, seller.soldProducts, seller.followersCount)
except NotFound as exc:
print(f"Seller not found: {exc}")
if seller:
for item in seller.listings(limit=3):
print(item.name, item.price, item.url)
for review in seller.reviews(limit=3):
print(review.rating, review.createdAt)
# Get the full category tree, then navigate subcategories.
tree = client.catalogtrees.get()
print(tree.version, tree.structure.name)
women = client.category(slug="women")
for sub in women.subcategories(limit=5):
print(sub.name, sub.slug)
print("exercised: listings.browse / listings.search / listing.details / sellers.get / seller.listings / seller.reviews / catalogtrees.get / category.subcategories")
Get the full category tree of shafa.ua. Returns the hierarchical catalog structure with all categories and subcategories. Each node contains name, slug, id, and nested subCatalogs arrays. The tree is a single root node with top-level gender/age categories (women, men, kids) each containing deeply nested subcategories.
No input parameters required.
{
"type": "object",
"fields": {
"version": "integer representing the catalog tree version",
"structure": "object containing the full category tree with name, slug, id, and nested subCatalogs arrays"
},
"sample": {
"data": {
"version": 4553,
"structure": {
"id": 1,
"name": "Каталог",
"slug": "clothes",
"subCatalogs": [
{
"id": 2,
"name": "Жіночий одяг",
"slug": "women",
"subCatalogs": [
{
"id": 3,
"name": "Верхній одяг",
"slug": "verhnyaya-odezhda",
"subCatalogs": []
}
]
}
]
}
},
"status": "success"
}
}About the Shafa API
Category and Listing Data
get_categories returns the full hierarchical catalog as a versioned tree — each node carries a name, slug, id, and nested subCatalogs array. Use get_subcategories with a parent_slug like 'women' or 'kids' to drill into a single branch without fetching the entire tree. browse_listings accepts that same slug alongside filter arrays for brands, sizes, colors, and on_sale, plus price_to for a UAH ceiling and order_by values of new, price_asc, or price_desc. Results include per-item fields: id, url, name, price, brand, seller, and sizes, with pageInfo.hasNextPage and endCursor for cursor-based pagination.
Product Detail and Similarity
get_listing_detail takes a full URL path (e.g. /uk/women/verhnyaya-odezhda/pidzhaki-i-zhakety/139633588-slug) and returns name, an image array, a structured offers object containing price, currency, availability, and seller info, a description string, and a similarProducts array. get_listing_similar extracts the numeric product ID from the same URL format and returns a dedicated similarProducts array with id, name, price, url, and thumbnail fields — useful for recommendation or cross-listing analysis without fetching the full detail payload.
Seller Data and Reviews
get_seller_profile returns a seller's sellerRating (out of 5), soldProducts, productsCount, followersCount, city, shopName, and firstName given a username. get_seller_listings pages through that seller's active inventory using an after cursor and a limit parameter. get_seller_reviews returns paginated buyer reviews, each with id, rating, comment, createdAt, author, and an associated product object — sufficient to assess seller reputation or track listing history over time.
Search
search_listings accepts a query string (Ukrainian or Latin, e.g. 'zara плаття') and returns the same item shape as browse_listings — items, pageInfo, and totalCount — making it straightforward to integrate keyword-based discovery alongside category-based browsing.
The Shafa API is a managed, monitored endpoint for shafa.ua — not a raw scraper you maintain. Every endpoint is automatically health-checked on a schedule, and when shafa.ua 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 shafa.ua 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?+
- Track price trends for specific brands by polling
browse_listingswithbrandsandorder_by: price_asc - Build a seller reputation dashboard using
sellerRating,soldProducts, andget_seller_reviewsdata - Identify underpriced listings by combining
price_tofilters withget_listing_detailcondition and description fields - Index the full shafa.ua category taxonomy for navigation or catalog mapping using
get_categories - Monitor a seller's active inventory changes over time via
get_seller_listingswith cursor pagination - Generate product recommendations for a listing page using
get_listing_similarthumbnail and price fields - Cross-reference buyer review sentiment and rating distributions across multiple sellers for market research
| 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 shafa.ua have an official developer API?+
What does `browse_listings` return and how granular are the filters?+
browse_listings returns an items array where each object includes the listing id, url, name, price in UAH, brand, seller, and available sizes. Filters accept JSON arrays for brands, sizes, and colors (using numeric IDs), a boolean on_sale flag, an integer price_to ceiling, and an order_by string. totalCount may be null for some filter combinations, so rely on pageInfo.hasNextPage for reliable pagination control.Are private or archived listings accessible through the API?+
get_seller_listings reflects the seller's current active inventory, and get_listing_detail will not return data for a listing URL that is no longer live.Does the API support filtering listings by city or region?+
browse_listings and search_listings do not accept a location parameter. get_seller_profile does return a seller's city object with id and name, but there is no endpoint that filters the main listing feed by geography. You can fork this API on Parse and revise it to add a location-based filter endpoint.Can I retrieve buyer profiles or their purchase history?+
get_seller_profile and get_seller_reviews, where each review includes an author field, but there are no endpoints for buyer account pages or purchase histories. You can fork this API on Parse and revise it to add a buyer profile endpoint if that data is publicly accessible on the site.