How to track income from sources that have no API

I earn from 25 sources. Most of them will never have an earnings API, and most of them make under $10 a month. Here's the method I settled on after trying to automate it.

Sources I track
25
across 6 months
With an earnings API
9
16 are typed by hand
Under $10 a month
19
the actual long tail
Time per month
~3 min
all 16 manual sources

Every revenue dashboard on the market assumes an integration exists. Connect Stripe, connect PayPal, watch the chart. That works right up until you count what you actually earn โ€” and find that the majority of your income sits in places with no API at all: affiliate programmes, ad networks, marketplaces, one-off sponsorships, a payout that arrives as a bank transfer with a reference number.

I hit this with my own numbers. Of the 25 sources I track, nine can be synced automatically. The other sixteen cannot, and Amazon Associates is the clearest example โ€” no earnings API, and the two APIs Google suggests belong to other Amazon programmes entirely. So I stopped trying to automate the unautomatable and built a method instead.

The method

  1. Separate the sources by what's possible, not by size

    Two lists: has an earnings API, doesn't. This is the only classification that matters, because it decides how the number arrives. Do it once and it rarely changes โ€” a platform that has no API today almost never ships one.

    Don't sort by revenue. The instinct is to automate the big ones and ignore the small ones, but the small ones are collectively where the surprises live: the source you assumed was making $50 and was making $2, or the one quietly costing you money.

  2. Automate exactly what the platform supports

    For the ones with an API, sync and forget. Stripe by product, RevenueCat for mobile, whatever your stack is. Take the net figure, after fees โ€” gross revenue you never received is a vanity number, and reconciling it against your bank later wastes an afternoon.

  3. For everything else, record one monthly total

    Open the platform's report, read the month's figure, write it down. Ten seconds per source. That number is exactly as accurate as the CSV you'd have scraped, because it comes from the same report.

    The temptation is to want daily granularity everywhere. For a source earning $4 a month, daily data is noise you'll never make a decision from. Monthly also matches how these platforms close their own books, so you're not inventing precision that doesn't exist upstream.

  4. Do it on a fixed day, after the periods close

    Pick a day early in the month and do every manual source in one sitting. Batched, my sixteen take about three minutes. Spread across the month as you remember them, they take longer and you forget two.

    Waiting until the periods close matters: affiliate programmes routinely revise the previous month for returns and reversals. Record too early and you'll book money that gets clawed back.

  5. Put both kinds on one screen

    This is the step people skip, and it's the one that makes the rest worth doing. If synced sources live in a dashboard and typed sources live in a spreadsheet, you have no total โ€” and the total is the only number that answers "am I growing?"

    A typed number and a synced number are the same kind of fact once they're recorded. Treat them differently in your reporting and you'll trust the chart that's missing half your income.

Why not just scrape it?

Because you'd be automating a login flow, not an interface. An API is a contract; a dashboard is a layout that changes whenever a designer feels like it.

Scraping one account

Hours to build, breaks silently

A headless browser, stored credentials, and a script that stops working the next time the platform moves a button โ€” usually without telling you, so you notice when a month reads $0.

Typing one number

Ten seconds, can't break

Same figure, same source, no credentials at rest and nothing to maintain. Over a year, all my manual sources cost about half an hour in total.

Scraping earns its keep when you're managing many accounts, or when the data is genuinely too granular to transcribe. For a solo operator with one account per platform, the maths doesn't work: the build costs more than the entire lifetime of manual entry it replaces.

The credential problem nobody mentions

Automating a dashboard login means your password for a platform that holds your money is sitting in a script or an environment variable. For a source earning a few dollars a month, that's a poor trade even when the scraper works.

What this method won't do

It won't give you real-time revenue. If you need to know today's affiliate earnings today, no method gets you there for a platform that reports monthly โ€” not scraping either, because the platform itself doesn't know yet.

It also won't survive being done irregularly. Miss two months and you're reconstructing from old reports, some of which no longer show the range you need. The discipline of the fixed day is what makes it work; it's three minutes, and it's the whole cost.

What it does give you

A total you can trust, including the money that integration-only tools cannot see. In my case that's sixteen sources โ€” the majority of the count, and the part of the picture that would otherwise be invisible. Five of them turned out to be negative once I actually looked, which is not something an automated dashboard would have told me, because it never had them in the first place.

You can see the running total from this method on my open numbers page: six months, 25 sources, nine synced and sixteen typed.

This is the method, in software

IncomeOS syncs what has an API and takes a typed monthly total for what doesn't, so both kinds of income land on the same screen and add up.

See the dashboard Or self-host it free โ€” MIT, your own database. See my real numbers.