A Chrome extension that downloads all 10 daily reports from Shopee Seller Centre Malaysia with one click, instead of clicking through the site ten times.
Files keep Shopee's own names and are sorted into dated folders:
Downloads/
Shopee daily report/
05082026-Wednesday/
05082026-Wednesday-0823/ ← one folder per run
parentskudetail.20260804_20260804.xlsx
Shopee-Ads-Overall-Data-30_07_2026-05_08_2026.csv
Order.all.20260706_20260804.xlsx
Order.all.20260606_20260705.xlsx
...
1. Download
2. Unzip it, and keep the folder somewhere safe
Documents is a good spot. Not Downloads — Chrome reads from this folder every time you use the extension, so it must not be deleted or moved later.
3. Add it to Chrome
- Type
chrome://extensionsin the address bar - Turn on Developer mode (top right)
- Click Load unpacked (top left)
- Choose the folder you unzipped
The orange icon appears in your toolbar. Pin it if you like.
Chrome may show a popup saying "Disable developer mode extensions" when it starts. That is normal for extensions installed this way — just close it.
- Log in to Shopee Seller Centre as you normally would
- Click the orange icon
- Click 🏎 Fast n Furious — about 6 minutes
- Leave the window open and don't touch it while it runs
- When it finishes, click Open folder to see your files
It opens one tab per report, asks Shopee for all ten at once, and collects them as they finish. You can also click a single number (1–10) to fetch just that one report.
The two Orders reports take longer to arrive. Shopee does not hand those over on the spot — it builds them on its own servers and lists them under Export History on the same page a minute or two later. Every report is asked for first and collected afterwards, so that wait overlaps with the other eight. If the last stretch of a run looks idle, that is what it is doing.
If one of them ever fails, the run folder will also hold a small
orders-log.txt recording what it did step by step, so the problem can be
explained rather than guessed at. A run where everything worked leaves no such
file.
The popup keeps a list of past runs — when each one happened, which folder it saved into, every file it brought back, and anything that failed. It answers "did I already run this morning, what did I get, and where did it go?" without digging through Downloads, which matters because every run makes its own dated sub-folder.
Click 10 files under a run to see the reports it fetched and their filenames.
The last 40 runs are kept. Clear this list empties it; it never touches the files themselves.
The best time to grab Real Time is late at night, when the day's data is complete. If you miss that, set Real Time covers to an earlier date and the extension fetches that whole day instead.
The whole run is then filed under that day's folder, not today's.
| # | Report | Covers |
|---|---|---|
| 1 | Real Time | today, or the date you picked |
| 2 | Yesterday | yesterday |
| 3 | By Day | 3 days ago |
| 4 | Past 7 Days | the last 7 days |
| 5 | By Week | last week |
| 6 | Ads Overall | Shopee's own range |
| 7 | Ads GMV MAX | Shopee's own range |
| 8 | Past 30 Days | the last 30 days |
| 9 | Orders (last 30 days) | the 30 days ending yesterday |
| 10 | Orders (previous 30 days) | the 30 days before that |
Each row in the popup shows the exact date it will fetch.
Reports 9 and 10 are two back-to-back blocks: no day appears in both, and together they cover 60 days — which is exactly as far back as Shopee allows a single order export to reach.
The extension checks for updates by itself. When one is available the popup says so — click Update and it installs itself.
The first time you update, Chrome asks you to pick the extension folder. That is a one-off, and it is the only way a browser will let an extension write to its own folder.
You can also press Check in the popup at any time.
| Problem | What to do |
|---|---|
| "Please log in to Shopee Seller Center first" | Log in to Seller Centre in the same Chrome, then run again |
| A report shows a red error | Run just that number again. Shopee's page is sometimes slow |
| Nothing downloads | Make sure the Chrome window stayed open and visible during the run |
| The extension disappeared | The folder was moved or deleted. Unzip it again and re-add it |
| "Chrome saved … instead of Shopee daily report/…" | Another extension is deciding where downloads go. See below |
Chrome asks every extension that can see downloads where a file should go, and the last word goes to whichever one was installed most recently. So the folder this extension asks for is a request, not a decision — a download manager, a "save to folder" helper, even a screen recorder can overrule it, and the reports then land in plain Downloads with Shopee's names on them.
When that happens the extension notices and fetches its own copy into the run folder, so you still get the folder. It also says so on the report line — "a stray copy was left in Downloads" — because you will find a second copy of that file sitting there, and a silent tick would make that look like a fault.
To stop it happening at all, open chrome://extensions and turn off anything
that manages downloads.
Each person gets their own shop's reports, from whichever Shopee account they are logged into. Nothing is shared, and no data is sent anywhere except between your browser and Shopee.
- Google Chrome 111 or newer
- A Shopee Seller Centre account (Malaysia)
How it works — for anyone maintaining the code
manifest.json
update.json version + file list the updater reads
background/background.js orchestration, navigation, disk writes, update check
content/interceptor.js MAIN world: blob / anchor / API interception
content/content.js ISOLATED world: all Shopee DOM interaction
popup/ toolbar UI
options/ update install + folder grant + update source
tools/ make-release.ps1, inspect-shopee.js
icons/
The background worker knows nothing about Shopee's DOM; the content script knows nothing about files.
Slow n Steady navigates one tab through each export in turn, with a 65s gap. Fast n Furious runs four phases across all tabs — load, set the data period, fire every export, then collect — so Shopee builds all seven reports concurrently instead of one after another.
Only page loading is parallel. Each tab is still brought to the front to be driven, because Chrome throttles timers in background tabs and Shopee's SPA cannot keep up otherwise.
- Timings are deliberate. The 15s post-load wait was measured against the real site. Shortening it is the first thing that will break.
- By Day and By Week go through the calendar, never the period dropdown
(which closes the picker) and never a text input — typing a date into the
first visible
input[type=text]hits Shopee's Search product box and exports an empty sheet. - The Latest Reports panel lists OLD reports. "Is the word Download on the page" is true the moment the panel opens. Reports are matched by filename, and the newest row may show the status text "Downloaded" with no button at all — so "first Download button" picks the wrong row.
- Panel labels are not filenames. A row reads
Shop GMV MAX-Detail-Data-29/07/2026-04/08/2026.csvbut the file arrives asShop+GMV+MAX-Detail-Data-29_07_2026-04_08_2026.csv. SeenormalizeShopeeName(). - GMV Max's download endpoint returns a placeholder name (
download.csv) and its API entries carry no usable name field, so the panel row is the only reliable source. The job is matched by id, not by name. downloads.download({filename})is only a suggestion. Another extension listening ononDeterminingFilenamecan override it, which is how files ended up loose in Downloads. Our own saves re-assert their path through the same listener.- Shopee redirects downloads to CDN hosts that do not look like
shopee.com.my, so host matching alone misses them. - MV3 service worker lifetime. The worker dies after ~30s idle, which would kill a 10-minute GMV Max poll. The content script pings every 10s; each message resets the timer. Do not remove the heartbeat.
.\tools\make-release.ps1 -Version 1.8.1 -Notes "What changed"
git add -A; git commit -m "v1.8.1"; git pushIt rewrites the version in manifest.json as text (never a JSON round-trip,
which collapses single-element arrays) and regenerates update.json from the
files actually on disk.
tools/inspect-shopee.js pasted into DevTools on the Product Performance page
dumps the selectors and wording the extension depends on — useful when Shopee
changes its UI.