A skincare brand shipping 3,000 online orders a month had its accountant spend six hours every week exporting orders to Excel and uploading them to a value-added e-invoice provider by hand. The last filing period told the story: 37 invoices never issued, 12 issued twice, and 9 partial returns handled by voiding the whole invoice and reissuing it. Taiwan e-invoice integration is not about automating a button click. It is about making sure orders, returns and invoices always reconcile, without a person in the loop. Every missed invoice is a compliance risk, and every duplicate is a customer asking support why they were billed twice.
When it fits, and when it does not
| API integration makes sense | Hold off |
|---|---|
| You issue more than 300 invoices a month | Under 50 a month: the provider's dashboard is enough |
| Partial returns require automatic allowances (credit notes) | Your e-commerce platform already issues invoices and you are not leaving it |
| You handle mobile barcode carriers, donations and company tax IDs | Retail only, and your POS already includes an invoice module |
| Website, app and LINE share one invoice number range | The business model is still unproven and volume is erratic |
| You need daily reconciliation with an ERP | Hundreds of thousands a month: evaluate a self-hosted Turnkey setup |
Alternatives matrix
| Option | Upfront | Ongoing | Strength | Trade-off |
|---|---|---|---|---|
| Ministry of Finance e-invoice platform, manual entry | NT$0 | Staff hours | Free and official | Entirely manual |
| Provider dashboard or Excel batch upload | About NT$3,600 | Annual fee plus hours every week | Live the same day | Allowances rely on memory |
| Platform built-in invoicing | NT$0 | Bundled in subscription | No development | Locked in if you migrate |
| API integration with a provider | From NT$60,000 | Annual fee plus NT$2,000–5,000/month upkeep | Issuing through reconciliation automated | 4–5 weeks to build |
| Self-hosted Turnkey | NT$200,000+ | Servers and a dedicated operator | No per-invoice provider fees | Every upload failure is yours |
A rule of thumb that holds in most of our projects: once invoices are tied to returns, multiple channels or an ERP, dashboards and built-in platform features start to leak. The leak shows up as manual spreadsheets, not as an error message, which is why many teams notice it only when the filing period closes and the numbers refuse to match.
The five-week build
| Phase | Time | Deliverables | Tools |
|---|---|---|---|
| Tax scenario mapping | 3 days | Invoice scenario matrix, decision on when to issue | Notion, Miro |
| Provider onboarding (in parallel) | 5–10 business days | Contract, sandbox account, number-range setup | ECPay |
| Integration | 7–10 days | Issue, void, allowance, query, carrier validation | Laravel, MySQL |
| Reconciliation admin | 5 days | Daily reconciliation report, failed-job retry | Custom admin, Sentry |
| Acceptance and launch | 3–5 days | 40 test cases, accounting SOP | Postman, UptimeRobot |
ECPay's B2C e-invoice API documentation splits issuing, delayed issuing, allowances, voids, queries and mobile-barcode or tax-ID validation into separate endpoints. In practice you integrate five to seven of them, not one.
What it really costs
- Development: single-channel B2C NT$60,000–120,000; multi-channel with B2B and ERP reconciliation NT$150,000–250,000
- Provider fees: taking ECPay's e-invoice pricing as an example, new accounts pay a NT$3,600 setup fee; renewals run NT$3,600 for 5,000 invoices a year and NT$6,000 for 20,000, all before 5% VAT, and unused volume does not roll over
- Notifications and printing: email is free, SMS is NT$1.5 per message, and printing a winning invoice at a convenience store costs NT$20
- Hidden costs: 4–8 hours of your accountant's time to confirm scenarios, NT$10,000–30,000 to clean up or back-issue old orders, and adjustments whenever regulations or the API change
Expectation vs. reality
| Clients assume | What actually happens |
|---|---|
| One issuing API call is the whole job | Returns and allowances take nearly half the build time |
| Issue the invoice the moment payment clears | Pre-orders and cooling-off periods need a separate issuing trigger |
| B2B just adds a tax ID field | Splitting tax-inclusive prices produces NT$1 rounding gaps |
| Accounting can walk away after launch | The first two periods still need daily spot checks |
None of these gaps is a technical problem on its own. Each one is a business rule nobody wrote down, and the integration simply makes it visible. Budget time for your accountant to answer questions during the first two weeks.
Six traps and how to avoid them
- Duplicate invoices: a timeout triggers a retry and a second invoice. Use the order number as an idempotency key, backed by Laravel Queue's ShouldBeUnique
- Voiding whole invoices for partial returns: always issue an allowance instead
- Rounding gaps: calculate tax on the invoice total everywhere in the system, never line by line
- Mistyped carriers: call the mobile barcode validation API at checkout
- Running out of numbers: alert when fewer than 20% of the range remain, and report unused numbers as blank at period end
- Silent upload failures: under the Ministry of Finance rules effective 2025, B2C invoices must be transmitted within 2 days and B2B within 7, with fines of NT$1,500–15,000 that can be imposed per occurrence. Reconcile daily and alert on the failure queue
Success metrics and a 90-day roadmap
- Day 30: automatic issuing rate at or above 98%, failure rate below 0.5%, zero duplicates
- Day 60: every void and allowance runs through the system; month-end accounting time drops from 24 hours to under 6
- Day 90: first full filing period reconciles with zero discrepancies, invoice-related support tickets fall, and you evaluate extending to B2B or retail
If the day-30 failure rate stays above 0.5%, look at carrier validation and timeouts first; in our experience those two account for most failed issues.
Decision checklist
- ☐ More than 300 invoices a month?
- ☐ Accounting spends 3+ hours a week on invoices?
- ☐ Missed or duplicate invoices last period?
- ☐ Partial returns or refunds?
- ☐ Both B2C and B2B customers?
- ☐ Two or more sales channels?
- ☐ Need to reconcile with an ERP?
- ☐ Pre-orders or subscriptions?
- ☐ Platform invoicing is holding you back?
- ☐ Someone can read the reconciliation report daily?
- ☐ Can you accept 4–5 weeks of development?
- ☐ Budget of NT$60,000 or more?
Seven or more yes answers usually means the saved labor pays back the build in 6–12 months. Fewer than four, stay on the provider dashboard for now.
FAQ
Do I have to go through a value-added provider?
No. Low volumes can be issued manually on the Ministry of Finance platform, and very high volumes can justify a self-hosted Turnkey. Most small and mid-sized businesses sit in between, where a provider API is the least effort.
Should the invoice be issued at payment or at shipment?
For in-stock goods shipped immediately, issue at payment. For pre-orders, subscriptions or goods with a cooling-off period, issue at shipment or after the period ends using delayed issuing.
Does every return require voiding the invoice?
No. A full return inside the voiding window can be voided; partial returns or returns crossing a filing period should get an allowance.
How long does integration take?
Single-channel B2C takes about 3–4 weeks; multi-channel with B2B and ERP reconciliation about 5–7 weeks. Provider onboarding runs in parallel.
Next step
ScriptWalker's e-invoice integration service starts at NT$60,000 and covers scenario mapping, API integration, an allowance and reconciliation admin, an accounting SOP and 30 days of post-launch support. Bring one period of orders and returns to a free 30-minute consultation and we will trace where the missing invoices come from.
- Email: [email protected]
- Phone: 0916-224-047
- LINE: @ufv9089p