mb mybillbook private beta
← All features

GST returns

Three returns, one books. mb builds GSTR-1 and GSTR-3B directly from the sales + credit-note tables; GSTR-2B is reconciled against the purchase tables.

the wedge

GSTR-2B reconciliation

Every CA's #1 manual-Excel pain point. Now: upload the portal's JSON, get a 4-bucket diff in under a second.

GSTR-2B reconciliation

Acme Steel Ltd — April 2026

Uploaded by demo@billmybill.com · 30 portal invoices · 30 books invoices
✓ matched
22
⚠ with issues
4
⊕ in books only
4
⊖ in portal only
4
Supplier Invoice Field Books Portal Δ
Acme Logistics Pvt Ltd
27AAACL5678C1ZK
INV/26-27/0023 cgst 900.00 897.00 +3.00
Acme Logistics Pvt Ltd
27AAACL5678C1ZK
INV/26-27/0023 sgst 900.00 897.00 +3.00
Bharat Steels & Co
29ABCDX5142F1Z5
INV/26-27/0011 igst 5400.00 5403.00 −3.00
Bharat Steels & Co
29ABCDX5142F1Z5
INV/26-27/0011 cess 0.00 3.00 −3.00
Positive Δ = books over-claimed ITC (audit risk) · Negative Δ = under-claimed (ITC left on table)

Strict CBIC v3.0 parser

We parse exactly the schema published by GSTN — rtnprd, data.docdata.b2b[], item-level itm_det sums collapsed to header amounts. Period collisions prompt replace-confirm; non-b2b sections (cdnr / cdnur / isd) are counted and skipped with a "Phase 4" tag in the import summary.

Pure-Go matching, O(n+m)

Hash-keyed on (GSTIN, invoice_number, RCM-flag). Tolerances locked to standard CA practice: ±₹1 per tax field, ±7 days on invoice date, exact match on GSTIN+inum+RCM, HSN prefix-4. Stable-sorted output so the demo screenshot is deterministic.

Four buckets, four CA workflows

  • Matched — every field within tolerance. Read-only.
  • With issues — GSTIN+inum match, ≥1 tax field drifts. Δ colour-coded by sign.
  • In books only — vendor hasn't filed yet. CA chases.
  • In portal only — vendor filed, we didn't book. One-click "Create bill" pre-fills the form.

Per-row triage state

"Mark ignored" / "Mark disputed" on any row persists to the gstr2b_invoices.user_marked column. Reload the page tomorrow — your triage is still there. Re-uploading 2B for the same period prompts confirm-replace.

GSTR-1

Outward-supplies return. Built straight from your finalized invoices + credit notes for the period.

Five buckets, plus HSN summary

  • B2B Registered-buyer sales (CGST+SGST or IGST per place-of-supply)
  • B2CL Unregistered inter-state sales above ₹2.5L (IGST)
  • B2CS Unregistered sales not in B2CL — aggregated by tax-rate × place-of-supply
  • CDNR Credit notes against registered buyers
  • CDNUR Credit notes against unregistered buyers
  • HSN HSN-wise summary of every line across the period

Two export formats

GET /gstr1 renders an HTML preview you can cross-check before filing. GET /gstr1/download.json emits the exact CBIC v3.0 JSON the portal expects — drop it straight into the offline tool or upload via API.

Mathematical reconciliation: every CDNR row offsets a B2B row of the same period. The HTML preview shows totals before and after credit-note offset.

GSTR-3B

Self-declaration summary return. Same source tables as GSTR-1 plus ITC from your purchases ledger.

Tables we build

  • 3.1 Outward supplies (taxable + nil/exempt/non-GST + RCM)
  • 3.2 Inter-state supplies to unregistered persons & UIN holders
  • 4 Eligible ITC (lights once purchases are recorded)
  • 5 Exempt/nil/non-GST inward supplies
  • 6.1 Tax payment summary

Honest gaps

  • · Table 4 (ITC) currently zeros until the next release wires it through the purchases tables. The deferred-reason text is embedded in the export so a CA reviewing the JSON sees exactly what's pending.
  • · 3.1(d) RCM inwards, 5 exempt inwards, and 3.2 UIN supplies ship the same way — deferred with explicit notes in the JSON output.
  • · No filing automation. We export; you file on gst.gov.in.