curl "https://api.alura.io/v1/research/products?q=mug&price_max=30&sort=est_sales" \
-H "Authorization: Bearer $ALURA_API_KEY"const res = await fetch('https://api.alura.io/v1/research/products?q=mug&price_max=30&sort=est_sales', {
headers: {
Authorization: `Bearer ${process.env.ALURA_API_KEY}`,
},
});
console.log(await res.json());import json
import os
import urllib.request
request = urllib.request.Request(
"https://api.alura.io/v1/research/products?q=mug&price_max=30&sort=est_sales",
headers={
"Authorization": f"Bearer {os.environ['ALURA_API_KEY']}",
},
)
with urllib.request.urlopen(request) as response:
print(json.load(response)){
"object": "list",
"data": [
{
"object": "research.product",
"id": "4524717183",
"title": "Personalized Name Mug, Custom Coffee Mug",
"url": "https://www.etsy.com/listing/4524717183",
"shop": {
"id": "48911633",
"name": "MugCo"
},
"price": {
"amount": "24.99",
"currency": "EUR",
"usd": "27.10"
},
"image_url": "https://i.etsystatic.com/48911633/r/il/0a1b2c/4524717183/il_570xN.4524717183_mug1.jpg",
"category": {
"id": "1062",
"path": [
"Home & Living",
"Kitchen & Dining",
"Drink & Barware",
"Drinkware",
"Mugs"
]
},
"sales": {
"est_lifetime": 6400,
"est_monthly_avg": 210,
"est_lifetime_revenue_usd": 173440
},
"reviews": {
"count": 842,
"average": 4.9
},
"favorites": 3120,
"listing_score": 86,
"listed_at": "2023-04-02T10:11:00.000Z",
"as_of": "2026-10-13T08:05:00.000Z"
}
],
"has_more": false,
"next_cursor": null,
"total": {
"value": 1,
"relation": "eq"
}
}{
"type": "https://docs.alura.io/errors/invalid_request",
"title": "Invalid request",
"status": 400,
"code": "invalid_request",
"detail": "Invalid request",
"suggestion": "Fix the request as the detail says, then send it again.",
"retryable": false,
"request_id": "req_01JQ5W3H8M2N4P6R8T0V2X4Z6B"
}{
"type": "https://docs.alura.io/errors/unauthorized",
"title": "Unauthorized",
"status": 401,
"code": "unauthorized",
"detail": "Unauthorized",
"suggestion": "Send a valid API key as `Authorization: Bearer alura_sk_...`.",
"retryable": false,
"request_id": "req_01JQ5W3H8M2N4P6R8T0V2X4Z6B"
}{
"type": "https://docs.alura.io/errors/credits_exhausted",
"title": "API credits exhausted",
"status": 402,
"code": "credits_exhausted",
"detail": "API credits exhausted",
"suggestion": "Upgrade the plan or wait for the monthly reset.",
"retryable": false,
"request_id": "req_01JQ5W3H8M2N4P6R8T0V2X4Z6B"
}{
"type": "https://docs.alura.io/errors/plan_required",
"title": "Plan required",
"status": 403,
"code": "plan_required",
"detail": "Plan required",
"suggestion": "Upgrade the workspace plan to use this operation.",
"retryable": false,
"request_id": "req_01JQ5W3H8M2N4P6R8T0V2X4Z6B"
}{
"type": "https://docs.alura.io/errors/not_found",
"title": "Not found",
"status": 404,
"code": "not_found",
"detail": "Not found",
"suggestion": "Check the ID, or search for it first.",
"retryable": false,
"request_id": "req_01JQ5W3H8M2N4P6R8T0V2X4Z6B"
}{
"type": "https://docs.alura.io/errors/method_not_allowed",
"title": "Method not allowed",
"status": 405,
"code": "method_not_allowed",
"detail": "Method not allowed",
"suggestion": "Use one of the methods in the Allow header.",
"retryable": false,
"request_id": "req_01JQ5W3H8M2N4P6R8T0V2X4Z6B"
}{
"type": "https://docs.alura.io/errors/rate_limited",
"title": "Rate limited",
"status": 429,
"code": "rate_limited",
"detail": "Rate limited",
"suggestion": "Wait for Retry-After, then retry.",
"retryable": true,
"request_id": "req_01JQ5W3H8M2N4P6R8T0V2X4Z6B"
}{
"type": "https://docs.alura.io/errors/internal_error",
"title": "Internal error",
"status": 500,
"code": "internal_error",
"detail": "Internal error",
"suggestion": "Retry; if it keeps failing, report the request_id.",
"retryable": true,
"request_id": "req_01JQ5W3H8M2N4P6R8T0V2X4Z6B"
}{
"type": "https://docs.alura.io/errors/credits_unavailable",
"title": "API credits unavailable",
"status": 503,
"code": "credits_unavailable",
"detail": "API credits unavailable",
"suggestion": "Retry shortly.",
"retryable": true,
"request_id": "req_01JQ5W3H8M2N4P6R8T0V2X4Z6B"
}Search products
Finds Etsy products (other sellers’ listings) by words, category, price, estimated sales, reviews, listing date, maker and shop country, sorted by relevance or a field. Returns product summaries with Alura’s sales estimates; the totals stop counting at 10,000 and paging stops after 10,000 results. Only active listings are searched. Shops that opted out of Alura never appear. Costs 10 API credits per page with results; an empty page is free.
Cost: 10 API credits per page.
curl "https://api.alura.io/v1/research/products?q=mug&price_max=30&sort=est_sales" \
-H "Authorization: Bearer $ALURA_API_KEY"const res = await fetch('https://api.alura.io/v1/research/products?q=mug&price_max=30&sort=est_sales', {
headers: {
Authorization: `Bearer ${process.env.ALURA_API_KEY}`,
},
});
console.log(await res.json());import json
import os
import urllib.request
request = urllib.request.Request(
"https://api.alura.io/v1/research/products?q=mug&price_max=30&sort=est_sales",
headers={
"Authorization": f"Bearer {os.environ['ALURA_API_KEY']}",
},
)
with urllib.request.urlopen(request) as response:
print(json.load(response)){
"object": "list",
"data": [
{
"object": "research.product",
"id": "4524717183",
"title": "Personalized Name Mug, Custom Coffee Mug",
"url": "https://www.etsy.com/listing/4524717183",
"shop": {
"id": "48911633",
"name": "MugCo"
},
"price": {
"amount": "24.99",
"currency": "EUR",
"usd": "27.10"
},
"image_url": "https://i.etsystatic.com/48911633/r/il/0a1b2c/4524717183/il_570xN.4524717183_mug1.jpg",
"category": {
"id": "1062",
"path": [
"Home & Living",
"Kitchen & Dining",
"Drink & Barware",
"Drinkware",
"Mugs"
]
},
"sales": {
"est_lifetime": 6400,
"est_monthly_avg": 210,
"est_lifetime_revenue_usd": 173440
},
"reviews": {
"count": 842,
"average": 4.9
},
"favorites": 3120,
"listing_score": 86,
"listed_at": "2023-04-02T10:11:00.000Z",
"as_of": "2026-10-13T08:05:00.000Z"
}
],
"has_more": false,
"next_cursor": null,
"total": {
"value": 1,
"relation": "eq"
}
}{
"type": "https://docs.alura.io/errors/invalid_request",
"title": "Invalid request",
"status": 400,
"code": "invalid_request",
"detail": "Invalid request",
"suggestion": "Fix the request as the detail says, then send it again.",
"retryable": false,
"request_id": "req_01JQ5W3H8M2N4P6R8T0V2X4Z6B"
}{
"type": "https://docs.alura.io/errors/unauthorized",
"title": "Unauthorized",
"status": 401,
"code": "unauthorized",
"detail": "Unauthorized",
"suggestion": "Send a valid API key as `Authorization: Bearer alura_sk_...`.",
"retryable": false,
"request_id": "req_01JQ5W3H8M2N4P6R8T0V2X4Z6B"
}{
"type": "https://docs.alura.io/errors/credits_exhausted",
"title": "API credits exhausted",
"status": 402,
"code": "credits_exhausted",
"detail": "API credits exhausted",
"suggestion": "Upgrade the plan or wait for the monthly reset.",
"retryable": false,
"request_id": "req_01JQ5W3H8M2N4P6R8T0V2X4Z6B"
}{
"type": "https://docs.alura.io/errors/plan_required",
"title": "Plan required",
"status": 403,
"code": "plan_required",
"detail": "Plan required",
"suggestion": "Upgrade the workspace plan to use this operation.",
"retryable": false,
"request_id": "req_01JQ5W3H8M2N4P6R8T0V2X4Z6B"
}{
"type": "https://docs.alura.io/errors/not_found",
"title": "Not found",
"status": 404,
"code": "not_found",
"detail": "Not found",
"suggestion": "Check the ID, or search for it first.",
"retryable": false,
"request_id": "req_01JQ5W3H8M2N4P6R8T0V2X4Z6B"
}{
"type": "https://docs.alura.io/errors/method_not_allowed",
"title": "Method not allowed",
"status": 405,
"code": "method_not_allowed",
"detail": "Method not allowed",
"suggestion": "Use one of the methods in the Allow header.",
"retryable": false,
"request_id": "req_01JQ5W3H8M2N4P6R8T0V2X4Z6B"
}{
"type": "https://docs.alura.io/errors/rate_limited",
"title": "Rate limited",
"status": 429,
"code": "rate_limited",
"detail": "Rate limited",
"suggestion": "Wait for Retry-After, then retry.",
"retryable": true,
"request_id": "req_01JQ5W3H8M2N4P6R8T0V2X4Z6B"
}{
"type": "https://docs.alura.io/errors/internal_error",
"title": "Internal error",
"status": 500,
"code": "internal_error",
"detail": "Internal error",
"suggestion": "Retry; if it keeps failing, report the request_id.",
"retryable": true,
"request_id": "req_01JQ5W3H8M2N4P6R8T0V2X4Z6B"
}{
"type": "https://docs.alura.io/errors/credits_unavailable",
"title": "API credits unavailable",
"status": 503,
"code": "credits_unavailable",
"detail": "API credits unavailable",
"suggestion": "Retry shortly.",
"retryable": true,
"request_id": "req_01JQ5W3H8M2N4P6R8T0V2X4Z6B"
}Authorizations
An API key: Authorization: Bearer alura_sk_....
Query Parameters
Words to find in the title, tags, materials, category or shop name; every word must match.
"mug"
An Etsy category ID (see /v1/categories); matches the category and every category under it.
^[1-9][0-9]{0,9}$Lowest price in USD.
^\d{1,9}(\.\d{1,2})?$Highest price in USD.
^\d{1,9}(\.\d{1,2})?$"30"
Fewest estimated lifetime sales.
^\d{1,10}$Most estimated lifetime sales.
^\d{1,10}$Fewest estimated sales per month (average).
^\d{1,10}$Most estimated sales per month (average).
^\d{1,10}$Fewest reviews.
^\d{1,10}$Listed on Etsy at or after this time.
^\d{4}-\d{2}-\d{2}(T\d{2}:\d{2}(:\d{2}(\.\d{1,3})?)?(Z|[+-]\d{2}:\d{2}))?$Listed on Etsy at or before this time.
^\d{4}-\d{2}-\d{2}(T\d{2}:\d{2}(:\d{2}(\.\d{1,3})?)?(Z|[+-]\d{2}:\d{2}))?$Who made the product.
i_did, someone_else, collective When the product was made.
made_to_order, 2020_2025, 2020_2024, 2020_2023, 2010_2019, 2006_2009, 2000_2005, before_2006, 1990s, 1980s, 1970s, 1960s, 1950s, 1940s, 1930s, 1920s, 1910s, 1900s, 1800s, 1700s, before_1700 true: digital downloads only; false: physical products only.
true, false Whether the seller offers personalization.
true, false Whether shipping is free.
true, false The shop's country, as an ISO 3166-1 alpha-2 code (US).
^[A-Za-z]{2}$relevance (default: best match for q, else most estimated sales), or a field. Sorting by a field leaves out products where that value is unknown. est_revenue orders by Alura's stored lifetime revenue, which values each sale at the price when it was estimated; est_lifetime_revenue_usd values every sale at today's price, so products whose price changed can appear out of order by that value.
relevance, est_sales, est_monthly_sales, est_revenue, price, newest, reviews, listing_score "est_sales"
desc (default) or asc. Not accepted with sort=relevance, which is always best match first.
asc, desc Page size: default 25, at most 100.
1 <= x <= 100The next_cursor of the previous page. Bound to the query, the workspace and the key.
Comma-separated dotted paths to return; id, object and as_of always come back.