What this guide covers, and what it doesn't
This guide walks through building a cost forecast for a document-extraction API integration — the steps a technical or financial evaluator would actually take to go from "we're considering this vendor" to a defensible monthly number a finance team can sign off on. It doesn't cover extraction accuracy, feature coverage or integration mechanics — those live on the API docs page and elsewhere in this cluster. This is specifically about the money.
Every step below assumes FlowParse's current published rate — a flat €0.035 per page, the same for every document type and plan — but the method itself (estimate volume, convert to the vendor's actual billing unit, multiply, buffer, compare, monitor) applies regardless of which vendor you're evaluating.
Why this is genuinely easy now, and wasn't always
A budgeting exercise like this one used to be harder against FlowParse's own API specifically — before a 2026-08-22 repricing, the rate scaled with a document's complexity across a roughly €0.01-to-€0.15-per-page range, which meant an accurate forecast required either running real documents through first, or estimating a complexity-tier mix in advance and accepting a wide margin of error. The flat rate removes that step entirely: the eight steps below reduce to arithmetic, not estimation-of-an-estimation.
That history is worth knowing specifically because it's a useful test to apply to any vendor you're evaluating alongside this one — ask directly whether the rate you're quoted is knowable before a document is sent, or only after. The answer changes how much of this guide's method actually applies cleanly.
Estimate your monthly document volume
Start from data you likely already have, rather than a guess made from scratch — how many invoices, receipts, statements or reports currently flow through the process this integration is meant to replace or augment. A finance team's existing bill-pay volume, a support team's current monthly ticket count with an attached document, or a product's current user growth rate applied to an expected per-user document count are all reasonable starting points.
If no historical baseline exists yet — a genuinely new product feature, for instance — build a range instead of a single number: a conservative launch estimate and a more optimistic one, both carried through the rest of this guide's steps.
Convert documents to pages, per document type
Pages, not documents, are what actually determine cost — so step 1's document count needs one more conversion. Pull a representative sample of the actual documents your integration will process and get a real average page count, broken out by type if your mix includes more than one.
| Document type | Typical average pages |
|---|---|
| Invoice | 1–3 |
| Receipt | 1 |
| Bank statement | 2–6, depending on monthly transaction volume |
| Financial report | 5–30+, highly variable by entity size |
| Brokerage statement | 3–10 |
Treat this table as a starting sanity check, not a substitute for your own sample — a specific customer base or document source can skew meaningfully from these figures in either direction.
Get the current rate from the API itself
Rather than treating this guide's €0.035 figure as gospel, confirm it live — a free API key and one call is all it takes, and it's the more defensible number to put in front of a finance team anyway, since it came from the system that will actually bill you.
curl https://flowparse.io/api/v1/usage \
-H "Authorization: Bearer pf_live_xxx"
# → { "plan":"FREE", "pricePerPageEur":0.035, ... }Compute your baseline monthly cost
Multiply each document type's monthly volume by its average page count, sum across types for a total monthly page figure, then multiply by the rate from step 3.
| Type | Docs/month × avg. pages | Pages | Cost |
|---|---|---|---|
| Invoices | 3,000 × 2 | 6,000 | €210 |
| Receipts | 1,500 × 1 | 1,500 | €52.50 |
| Bank statements | 500 × 4 | 2,000 | €70 |
| Total | — | 9,500 | €332.50 |
This is the baseline number — before any buffer, before any growth projection. It's the figure you'd actually be billed for this exact monthly volume, verifiable against GET /usage once real traffic starts flowing.
Add a buffer for testing and mixed volume
Two categories of spend sit outside the baseline: development-phase extraction calls (real, successful test runs against production data, not the free /validateendpoint, which never bills) and natural volume variance from month to month. A reasonable starting buffer is 10–20% on top of the baseline for an integration with a stable, well-understood volume pattern, or closer to 30–50% for a genuinely new or seasonal workload where step 1's estimate carries more uncertainty.
This buffer is a planning tool, not an actual extra charge — the flat rate means you only ever pay for pages genuinely processed, so a conservative buffer costs nothing if real volume comes in lower than planned; it only protects against the budget looking wrong if volume comes in higher.
Compare against building it yourself
A build-vs-buy comparison needs the in-house side priced on equal terms, which most teams underestimate on the first pass — the real cost of an internal OCR-plus-review pipeline includes more than the infrastructure line.
| Cost category | In-house pipeline | FlowParse API |
|---|---|---|
| Infrastructure to host and scale OCR | Ongoing, scales with volume | None — included in the per-page rate |
| Initial engineering build time | Weeks to months, one-time but real | Integration typically working within a day or two |
| Ongoing accuracy maintenance | Your team's responsibility as document layouts drift | Improved independently of your release cycle |
| Human review time for low-confidence fields | Reviewer-hours, easy to under-budget | Confidence scoring narrows review to genuinely uncertain fields |
| Per-page cost | Variable, hard to isolate from the above | €0.035, fixed |
The full version of this comparison, with a worked TCO example, lives in the cost-per-page economics use-case page in this cluster.
Model growth scenarios
Apply the same per-page rate to a 6-, 12- and 24-month volume projection, so the budget you present isn't a snapshot that immediately looks stale to whoever reviews it a quarter later. Because the rate is flat, this step is genuinely just re-running step 4's arithmetic with a larger volume figure — no separate discount-tier logic to reapply.
| Horizon | Projected monthly pages | Monthly cost |
|---|---|---|
| Today | 9,500 | €332.50 |
| 6 months (2× growth) | 19,000 | €665 |
| 12 months (4× growth) | 38,000 | €1,330 |
| 24 months (10× growth) | 95,000 | €3,325 |
Set up ongoing spend monitoring
A forecast is only useful if someone checks it against reality. Once real traffic starts, GET /usage's thisMonth.spendEur field gives an exact actual figure to compare against the forecast — a monthly check is enough for most teams, though a simple scheduled job polling this endpoint and alerting on a threshold is a low-effort way to catch a real volume spike before it shows up as a budget surprise.
Automating the monthly check
A minimal version of step 8 doesn't need a dashboard or a dedicated monitoring tool — a small scheduled job that calls GET /usage once a day and compares thisMonth.spendEur against a pro-rated fraction of the monthly forecast is enough to catch a meaningful drift within a day or two, rather than discovering it at the end of a billing cycle.
const dayOfMonth = new Date().getUTCDate()
const daysInMonth = new Date(new Date().getUTCFullYear(), new Date().getUTCMonth() + 1, 0).getUTCDate()
const expectedSoFar = (MONTHLY_BUDGET_EUR / daysInMonth) * dayOfMonth
const res = await fetch("https://flowparse.io/api/v1/usage", { headers: { Authorization: `Bearer ${API_KEY}` } })
const { thisMonth } = await res.json()
if (thisMonth.spendEur > expectedSoFar * 1.3) {
// real spend is running 30%+ ahead of the pro-rated forecast — worth a look
await alertTeam(`Spend at day ${dayOfMonth}: €${thisMonth.spendEur} (expected ~€${expectedSoFar.toFixed(2)})`)
}A 30% threshold is a reasonable starting point for most teams — tight enough to catch a genuine anomaly within a few days, loose enough not to page anyone over ordinary day-to-day volume variance. Tightening or loosening that threshold is worth revisiting once a few months of real data establish how much natural day-to-day swing your own volume actually has.
A note on multi-currency budgets
Every figure in this guide, and everything the API itself bills in, is denominated in euros — the rate, the price object on every response, and GET /usage's spend totals. A team budgeting in a different reporting currency needs one additional, explicit conversion step rather than assuming a fixed rate: apply your own organization's standard FX rate at the time of the budget exercise, and revisit that conversion periodically alongside the rest of the budget, since a currency movement can shift a euro-denominated cost line in your local currency even when the underlying page volume and rate haven't changed at all.
Keeping the working budget in euros internally, and converting only for the final figure presented to a non-euro finance team, avoids compounding rounding error across every intermediate step of the calculation — convert once, at the end, not at every step along the way.
Common mistakes in this exercise
Budgeting from document count instead of page count
A vendor billing per page needs a page figure — a document-count-only estimate silently underestimates cost for any document type with more than one page on average.
Using someone else's average page count instead of your own sample
The typical ranges in step 2's table are a sanity check, not a substitute for pulling a real sample from your own document source.
Forgetting the buffer, then treating the baseline as a hard ceiling
A baseline without any buffer looks precise but isn't — it's a point estimate from an estimate, and presenting it without a range invites unnecessary scrutiny when real spend lands slightly above it.
Comparing the API's per-page cost to only the in-house infrastructure line
Leaving out engineering time and reviewer-hours from the build-vs-buy comparison in step 6 systematically favors building it yourself on paper, in a way that rarely survives contact with reality.
Best practices for a durable budget model
Keep the formula visible, not just the output — a spreadsheet showing pages × rate = cost is easier for a reviewer to trust and re-derive than a single opaque number.
Break volume out by document type when the mix genuinely varies, and collapse it into one blended average only once that mix has proven stable.
Re-pull the rate from GET /usage whenever the budget is revisited, rather than trusting a cached number from months earlier.
Present a range (conservative and optimistic volume), not a single point estimate, for any integration without an established volume history.
Revisit growth projections at the same cadence as the rest of the product roadmap, so the budget scales alongside actual plans rather than a stale assumption.
How long each step takes
| Step | Typical time |
|---|---|
| 1–2: Volume and page estimate | A few hours, mostly pulling existing data |
| 3: Confirm the live rate | Minutes |
| 4–5: Baseline and buffer | An hour, once the inputs above are ready |
| 6: Build-vs-buy comparison | Half a day, if infrastructure and staffing costs need gathering from other teams |
| 7: Growth scenarios | An hour |
| 8: Monitoring setup | A few hours for a basic scheduled check and alert |
A full worked budget, start to finish
An AP automation startup is scoping document extraction for its own invoice-processing product. Current customer base processes roughly 4,000 invoices a month, averaging 2.2 pages each — a figure pulled from a sample of 200 real customer-submitted invoices, not a guess.
| Line | Figure |
|---|---|
| Monthly invoices | 4,000 |
| Average pages/invoice | 2.2 |
| Monthly pages | 8,800 |
| Baseline cost (8,800 × €0.035) | €308 |
| Buffer (15%) | €46.20 |
| Budgeted monthly figure | €354.20 |
Twelve months later, real customer growth put actual volume at 5,600 invoices a month — 40% above the original estimate. Because the rate never changed, the actual bill scaled by exactly the same 40%, with no separate renegotiation required to accommodate the growth.
A second example: a seasonal business
A tax-preparation platform processes bank statements heavily during a three-month filing season and far less the rest of the year — a genuinely seasonal pattern that a single average-month figure would misrepresent badly in either direction.
| Period | Monthly pages | Monthly cost |
|---|---|---|
| Filing season (3 months) | 60,000 | €2,100 |
| Off-season (9 months) | 4,000 | €140 |
| Annual total | 240,000 | €8,400 |
Because there's no minimum monthly commitment, the flat rate handles this pattern naturally — the off-season months genuinely cost less, rather than the platform paying for reserved capacity it isn't using, which a fixed monthly-seat pricing model would have charged regardless of the season.
Troubleshooting a budget that doesn't match reality
Actual spend is consistently higher than forecast
Recheck step 2's average page count against a fresh, larger sample — an early estimate based on a small or unrepresentative sample is the most common cause.
Spend spikes in specific months without a clear volume driver
Check for retried or duplicated extraction calls in the integration itself before assuming real document volume increased — a retry loop on a transient error can inflate page counts without a corresponding real-world change.
The forecast undercounts a document type entirely
Confirm every document type the integration actually sends to /extract is represented in the budget — a type added after the original estimate was built is an easy line to miss.
A printable checklist
Monthly document volume estimated from real, existing data
Average pages-per-document pulled from a real sample, per document type
Current rate confirmed live from GET /usage, not assumed
Baseline monthly cost computed and documented with its formula visible
A reasonable buffer applied and labeled as a buffer, not folded silently into the baseline
Build-vs-buy comparison includes engineering time and reviewer-hours, not just infrastructure
6/12/24-month growth scenarios modeled at the same rate
A monitoring check scheduled against GET /usage's real spend
Adapting this guide for a formal RFP process
A procurement-driven evaluation with multiple vendors and a formal request-for-proposal document needs the same eight steps above, applied once per candidate vendor rather than once. The one addition worth making for an RFP specifically is a normalized comparison line: convert every vendor's quoted pricing — whatever unit they use — into an equivalent cost at your own step-2 page volume, so the shortlist compares apples to apples rather than a per-page rate against a per-seat fee against a credit bundle.
Ask each vendor directly for their answer to step 3's question — is the rate knowable from your own data before a call is made, or does it depend on something only resolved after processing — and record the answer alongside the quoted number itself. A vendor whose rate can only be estimated after the fact deserves a wider uncertainty band in the final comparison, not the same point-estimate treatment as one with a flat, published rate.
Who this guide is for
Anyone responsible for a number that will end up in front of finance or a budget owner before an integration is approved — a technical lead scoping the build, a product manager estimating a new feature's cost basis, or a finance partner reviewing a proposed vendor spend. The steps assume no prior familiarity with FlowParse specifically, only a rough sense of the document volume your own product or process handles.
Revisiting the budget as volume grows
Because the underlying rate doesn't change with volume, revisiting this budget later is mostly a matter of plugging updated, real numbers into the same formula from step 4 — not rebuilding the model from scratch. The parts most worth re-checking periodically are the average-pages-per-document figure (which can drift as document sources or customer mix change) and the growth trajectory itself, rather than the arithmetic connecting them.
A short glossary
| Term | Meaning |
|---|---|
| Billed page | One page of a document that produced extracted data — the unit the flat rate is applied to. |
| Baseline cost | Expected monthly pages × the per-page rate, before any buffer. |
| Buffer | An intentional margin added on top of the baseline to absorb estimation error and testing volume. |
| Top-up | A one-off purchase of pages that never expire, separate from a plan's monthly allowance. |
| TCO | Total cost of ownership — the full cost of an alternative, including labor and infrastructure, not just its headline rate. |
Handing this off to finance
A finance reviewer generally wants three things from a proposed vendor spend: the formula, not just the output; a sense of how confident the volume estimate is; and what happens to the number if growth outperforms or underperforms the plan. Steps 4 through 7 above produce exactly those three things — hand over the baseline calculation with its inputs visible, the buffer with its reasoning, and the growth-scenario table, rather than a single unexplained monthly figure.
Keeping the actual formula attached to whatever gets handed off matters here specifically — a number alone is a conclusion, while the calculation behind it is what lets a reviewer sanity-check it independently rather than taking it on faith.
One habit worth keeping after the first budget is approved
The single highest-leverage habit from this entire guide is the smallest one: re-pulling the live rate before trusting any number, rather than caching an assumption from months earlier. Every other step — volume estimation, buffering, growth projection — depends on inputs that are yours to improve with better data over time; the rate itself is the one input that's simply correct or incorrect at any given moment, and confirming it costs one API call.
A budget built this way ages well — not because the underlying numbers never change, but because the process for updating them is cheap enough to actually repeat every time it matters, rather than becoming a stale document nobody revisits until a surprise forces the conversation. That's the real deliverable of this guide: not a single approved number, but a repeatable five-minute process anyone on the team can rerun whenever the question comes up again — the difference between a budget that quietly drifts wrong over a year and one that stays trustworthy the whole way through, without anyone having to remember to schedule a formal review to keep it that way.
