Built and run by one person.
1 in 5 Bulk Downloads Were Silently Truncating. Two Cloudflare Worker Bugs, Found and Fixed. Now Up to 4x Faster.

1 in 5 Bulk Downloads Were Silently Truncating. Two Cloudflare Worker Bugs, Found and Fixed. Now Up to 4x Faster.

Published: July 27, 2026

1 in 5 bulk downloads of the Tigzig MFPRO India mutual fund database were quietly running into trouble .. silent truncation, retries, higher latency. Now fixed. And up to 4x faster.

My dashboard tracks every error Cloudflare sees at the edge, including the class of failures my own server logs can never see. A few days back a pattern surfaced there, 504s on the full-database downloads, roughly 1 in 5 attempts. There was no error page for the user. The download would start fine, run for a while, then the file would arrive incomplete, and users on slower connections were hit hardest.

I dug in with Claude Code, reproduced it with throttled downloads from multiple countries, and found two separate bugs in how my Cloudflare Worker was serving large files from R2 storage.

Lessons for fellow tool builders, especially if you are serving large files

And be assured, however much you test, out in the wild new things will pop up .. your monitoring needs to be strong enough to catch those.

Both fixed now. Verified byte by byte from four countries. Downloads now arrive complete, and up to 4x faster.

MFPRO India Mutual Fund API - Docs Hub: tigzig.com/mfpro -> Docs

What is actually in the full database download?

One file, every NAV AMFI has ever published. 37M+ rows across 38,000+ schemes, 2006 onward, matured and dead schemes included. Five columns: scheme code, date, NAV, scheme name, ISIN.

Seven file options to pick from: Parquet 167 MB, CSV or TSV compressed at about 236 MB each, SQLite 1.28 GB. All seven carry the identical 37,084,484 rows (as of now), regenerated two to three times a day from AMFI. A manifest endpoint publishes the current sizes, row count and a validation flag, so your script or agent can confirm it got the whole thing.

One GET, no key: api.tigzig.com/mf/v1/download?format=parquet

Parquet loads into pandas in one line.

Or skip the download entirely, DuckDB can query the parquet straight over HTTP and pull only the byte ranges your query touches.

Docs: tigzig.com -> MFPRO -> Docs

More where this came from

The MF NAV API is one of many APIs and MCP servers on tigzig.com, all no key, no sign up.

Tremor for global macro, 300+ indicators across US, India, Europe. Vigil for India red flags, filings, insider trades, pledges, ratings. Yahoo Finance extraction, security comparison, technical analysis reports, and a markdown to PDF engine. Almost every one runs as both a REST API and an MCP server on the same backend, so your Claude, Cowork or any agent can connect directly.

Live uptime for the data APIs sits at status.tigzig.com.

The full directory: tigzig.com -> API/MCP.

And if browsing is not your thing, just ask your AI to read api.tigzig.com and find what you need.