Traderjoes APItraderjoes.com ↗
Access Trader Joe's product catalog, store locations, and recipes via API. Search products, get nutrition facts, find stores by zip, and retrieve recipes.
What is the Traderjoes API?
This API covers 7 endpoints across the Trader Joe's catalog, giving you access to product search, category browsing, full nutrition and ingredient data, store location lookup, and recipe content. The search_products endpoint returns paginated results with fields including retail_price, nutrition, ingredients, and category_hierarchy. Store lookups return up to 50 nearby locations with coordinates and hours.
curl -X GET 'https://api.parse.bot/scraper/a0f048fd-902c-4e5a-abed-d0b3d2f8d0bf/search_products?page=1&query=coffee&page_size=5&store_code=729' \ -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 traderjoes-com-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: Trader Joe's SDK — search products, browse categories, find stores, explore recipes."""
from parse_apis.trader_joe_s_api import TraderJoes, PageSize, CategoryId, ProductNotFound
tj = TraderJoes()
# Search for coffee products, capped at 3 results
for product in tj.products.search(query="coffee", page_size=PageSize._5, limit=3):
print(product.item_title, product.retail_price, product.sku)
# Get a single product by SKU and inspect its details
detail = tj.products.get(sku="82814")
print(detail.item_title, detail.retail_price, detail.country_of_origin)
# Browse products in the Beverages category (constructible by ID)
beverages = tj.category(id=CategoryId._182)
for item in beverages.list_products(limit=3):
print(item.item_title, item.sales_size, item.sales_uom_description)
# Find stores near a location
for store in tj.stores.search(query="New York", limit=3):
print(store.name, store.address1, store.city, store.state)
# Search recipes and drill into one for full details
first_recipe = tj.recipesummaries.search(query="salad", limit=1).first()
if first_recipe:
full = first_recipe.details()
print(full.title, full.template_name)
# Typed error handling: catch ProductNotFound on an invalid SKU
try:
tj.products.get(sku="000000")
except ProductNotFound as exc:
print(f"Product not found: {exc.sku}")
print("exercised: products.search / products.get / category.list_products / stores.search / recipesummaries.search / details")
Search for products by keyword via GraphQL. Returns paginated results with detailed product info including price, nutrition, ingredients, and category hierarchy. Results are scoped to a store for availability filtering.
| Param | Type | Description |
|---|---|---|
| page | integer | Page number for pagination. |
| queryrequired | string | Search keyword (e.g. 'organic', 'coffee', 'snacks'). |
| page_size | integer | Number of results per page. |
| store_code | string | Store code for availability filtering. Defaults to '729'. |
{
"type": "object",
"fields": {
"items": "array of product objects with sku, name, item_title, retail_price, nutrition, ingredients, category_hierarchy, and more",
"page_info": "object with current_page, page_size, and total_pages",
"total_count": "integer total number of matching products"
},
"sample": {
"data": {
"items": [
{
"sku": "081522",
"name": "COSTA RICA COFFEE 12 OZ",
"item_title": "Costa Rica Coffee",
"sales_size": 12,
"price_range": {
"minimum_price": {
"final_price": {
"value": 9.99,
"currency": "USD"
}
}
},
"retail_price": "9.99",
"category_hierarchy": [
{
"id": 2,
"name": "Products"
},
{
"id": 182,
"name": "Beverages"
},
{
"id": 194,
"name": "Coffee & Tea"
}
],
"sales_uom_description": "Oz"
}
],
"page_info": {
"page_size": 15,
"total_pages": 4,
"current_page": 1
},
"total_count": 55
},
"status": "success"
}
}About the Traderjoes API
Product Catalog
The search_products endpoint accepts a query string and optional page, page_size, and store_code parameters. Results include product sku, item_title, retail_price, structured nutrition panels, ingredients arrays, and a category_hierarchy tree. The get_products_by_category endpoint works the same way but filters by a category_id — for example, 8 for Food or 182 for Beverages. Both endpoints return a page_info object with current_page, page_size, and total_pages, plus a total_count integer.
Product Detail
get_product_detail takes a sku (automatically zero-padded to 6 digits) and returns the most complete product record: a nutrition array with per-serving calorie and nutrient breakdowns, an ingredients array with display_sequence ordering, a price_range object with minimum_price.final_price.value and currency, and a related_products array of summarized product objects. Pass an optional store_code to filter availability.
Store Locations
get_stores accepts an optional query — an address, city name, or zip code — and returns up to 50 store objects. Each store record includes name, address1, city, state, postalcode, phone, latitude, and longitude. Omitting the query returns stores near a default location.
Recipes and Editorial Content
get_recipes accepts an optional query and pagination parameters, returning an items array with title, url, hero_image_url, and categoryTitle. Retrieve a full recipe using get_recipe_detail with a slug (e.g. tahini-salad-dressing); the response includes a recipe_details component tree with ingredients, directions, cook time, and servings. The get_fearless_flyer endpoint returns current Fearless Flyer editorial content with no required inputs.
The Traderjoes API is a managed, monitored endpoint for traderjoes.com — not a raw scraper you maintain. Every endpoint is automatically health-checked on a schedule, and when traderjoes.com 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 traderjoes.com 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 grocery price tracker using
retail_pricefields fromsearch_productsorget_product_detail - Power a nutrition lookup tool by pulling
nutritionpanels andingredientsarrays for specific SKUs - Create a store finder feature using
latitude,longitude, andphonefromget_stores - Aggregate Trader Joe's recipes by category using
get_recipeswith a keyword query andget_recipe_detailfor full directions - Index the full product catalog by category using
get_products_by_categorywith known category IDs and pagination - Filter products containing specific ingredients by searching keyword terms and parsing
ingredientsarrays - Surface Fearless Flyer editorial content alongside product data using
get_fearless_flyer
| 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 Trader Joe's have an official public developer API?+
What does `get_product_detail` return beyond what `search_products` provides?+
get_product_detail returns the complete record for a single SKU, including the full nutrition panel array with per-serving breakdowns, an ordered ingredients array with display_sequence values, a structured price_range object with currency, and a related_products array. The search and category endpoints return a similar but summarized version of these fields across many products.Does the `get_stores` endpoint support filtering by state or country?+
query such as a city name, zip code, or street address, and returns up to 50 nearby stores. Filtering by state as a distinct parameter or returning all stores in a region is not directly supported by the current input shape. You can fork this API on Parse and revise it to add a state-level filtering or pagination layer over the results.Does the API expose product availability or inventory levels per store?+
store_code parameter that can filter results by store, but per-store inventory counts or real-time availability status are not returned as distinct fields. You can fork this API on Parse and revise it to add an endpoint that queries availability for a specific store code and SKU combination if that data becomes accessible.Are there quirks to be aware of with product SKUs?+
get_product_detail endpoint automatically zero-pads SKUs to 6 digits, so passing 82814 or 082814 will resolve to the same product. SKUs can be discovered from the sku field returned by search_products or get_products_by_category.