# How to Automate Etsy Sales Reports Using the API

- Tool: API Automations
- Difficulty: Intermediate
- Fix time: 45–60 minutes
- Compatibility: Etsy v3 API (2024+), Node.js 18+, Python 3.9+
- Last updated: May 2026

## TL;DR

Use the Etsy v3 API to pull shop receipts and transactions for any date range and aggregate them into revenue reports. Schedule a daily job with GET /shops/{shop_id}/receipts filtered by created_timestamp, calculate totals by SKU and date, and export to Google Sheets or a database automatically.

## Best practices

- Always use fixed Unix timestamp ranges (not relative 'last 24 hours') to ensure consistent, reproducible report data
- Store the rotated refresh token after every token refresh — Etsy rotates it and the old one becomes invalid
- Convert all monetary values using amount/divisor before any arithmetic to avoid 100x calculation errors
- Cache listing titles locally (Postgres or Redis) to avoid re-fetching the same listing details on every report run
- Add 150ms delay between paginated requests to stay safely under the 10 req/sec rate limit
- Keep daily and product-level data in separate sheets to simplify filtering and visualization
- Exclude refunded orders (was_refunded=true) from revenue totals for accurate net revenue reporting
- Test with a small date range (single day) before running your first monthly backfill

## Frequently asked questions

### Does the Etsy API provide a dedicated reporting or analytics endpoint?

No. Etsy does not have a dedicated analytics endpoint. You build reports by paginating through GET /shops/{shop_id}/receipts with date filters and aggregating the data yourself. The transactions endpoint provides more granular line-item data if you need SKU-level breakdowns.

### How do I convert Etsy API prices to real currency values?

Etsy stores all monetary values as sub-units with a divisor: {amount: 2999, divisor: 100} = $29.99. Always divide amount by divisor before doing any arithmetic. Never sum raw amount values across receipts without this conversion or your totals will be 100x too high.

### How far back can I query Etsy receipts?

Etsy does not impose a hard lookback limit on the receipts endpoint. You can use min_created timestamps from years ago. However, very large historical pulls will consume significant API quota — each page of 100 receipts uses one request, so plan accordingly against the 10,000/day limit.

### How do I handle refunds in my revenue reports?

Check the was_refunded field on each receipt. Receipts with was_refunded=true should be excluded from revenue totals. Track refunded_count separately to monitor your refund rate over time and flag product quality issues.

### My refresh token stopped working after 90 days. How do I prevent this?

Etsy refresh tokens expire in 90 days AND rotate on every use — each refresh call returns a new refresh_token that you must save. If you fail to save the new token after refresh, the next refresh attempt fails. Set a 80-day alert and implement a re-authorization flow to avoid lockouts.

### Can I get Etsy sales data into Google Sheets automatically without coding?

Yes — tools like Zapier and Make can write new orders to Sheets automatically. However, building daily aggregates (sum by day, top products) requires additional automation logic. For simple per-order logging, no-code tools work well. For analytical reports, the API-based approach gives you more control.

### Can RapidDev help me build a custom Etsy reporting dashboard?

Yes. If you need a custom dashboard combining Etsy sales data with other platforms (Shopify, Amazon, Stripe) or want automated reports delivered to Slack or email, RapidDev can build the full reporting pipeline for you.

---

Source: https://www.rapidevelopers.com/api-automations/how-to-automate-etsy-sales-reports-using-the-api
© RapidDev — https://www.rapidevelopers.com/api-automations/how-to-automate-etsy-sales-reports-using-the-api
