ERP Integration / Import & validation guide
Busy ERP to Google Sheets: CSV Import and Spreadsheet Reporting
Start with the input you actually have. A CSV exported from Busy is a file: import it into Google Sheets. IMPORTRANGE reads cells from another Google spreadsheet; it cannot read that CSV file. Both paths can support reporting, but neither establishes a live Busy connection by itself.
- Published
- Reading time
- 12 min
- Attribution
- Pending

In this guide
- Choose the path for your input
- Prepare one report and a safe destination
- Import a CSV file into Google Sheets
- Check types, totals and freshness before analysis
- Use IMPORTRANGE only after the source is a spreadsheet
- Plan refresh and handle failures visibly
- Build a dashboard that answers one operational question
- Treat CRM, documents and WhatsApp as separate downstream work
- Keep access narrow and test a recoverable pilot
- Google documentation used for the import paths
- Frequently asked questions
Part 01
Choose the path for your input
For a finance or operations team, a checked export is often a useful first step: take one report, preserve the company and financial year, and reconcile it before building a dashboard. Ask your Busy provider which export fields your edition and report support. This guide does not verify a particular Busy installation or connector.
A spreadsheet is a reporting copy. Keep Busy as the accounting record and show when the copy was obtained. Changing a Sheet does not write a voucher back to Busy unless a separately designed and verified integration does so.
Input type determines the import method
Scroll sideways to see every column →
| Input | Appropriate path | Refresh responsibility |
|---|---|---|
| Local CSV export | File → Import in Google Sheets | An operator obtains and imports a new export |
| Existing Google spreadsheet | IMPORTRANGE with its URL and a cell range | Source cells and Google’s refresh behavior |
| CSV/TSV at a URL | IMPORTDATA for a suitably accessible URL | The URL publisher and import behavior |
| Authenticated Busy/API connector | Separately verified integration | Named scheduler, permissions, retries and monitoring |
Part 02
Prepare one report and a safe destination
Choose a question first: outstanding by invoice, stock by warehouse, or sales by period. Export only the columns needed to answer it. Confirm the report’s filters, company, financial year, currency, opening balances and treatment of cancelled or reversed vouchers. Avoid putting payroll, full bank details or unrelated customer information into a shared dashboard.
Keep an unchanged export and a short import log with report name, extraction time, filters and operator. In Sheets, separate Raw data from Calculations and Dashboard tabs. Review who can view and edit the destination before importing financial data; do not publish a private ledger as a public CSV link.
- Confirm the export option with your Busy provider; obtain a CSV report through the supported workflow.
- Inspect the header and a few rows locally. Use explicit dates and numeric amounts without currency symbols or thousands separators where possible.
- Decide whether a full snapshot replaces the previous snapshot or a transaction feed appends new rows. Repeated snapshots must not be appended as new transactions.
- Use a stable key such as company + financial year + invoice reference; define how amendments and credit notes will be reconciled.
Part 03
Import a CSV file into Google Sheets
On a computer, open the destination spreadsheet and choose File → Import. Select the CSV, choose an available import option such as inserting a new sheet, and use the correct separator, then import. For this example, use a comma separator and rename the imported tab Raw. Google lists the supported formats and import options in its file-import documentation.
The sample below is invented data for a two-invoice exercise. Save it as a UTF-8 .csv file if you want to try the documented steps in your own disposable spreadsheet. DEMO is not a real company. The quotation marks around the first customer preserve the comma inside that one cell.
Company,FinancialYear,Invoice,InvoiceDate,DueDate,Customer,AmountINR,PaidINR
DEMO,2026-27,DEMO-001,2026-04-01,2026-04-15,"Sample Store, East",45000,10000
DEMO,2026-27,DEMO-002,2026-04-03,2026-04-20,Sample Store West,32000,0Expected check: 2 invoices, ₹77,000 total invoiced, ₹10,000 paid and ₹67,000 outstanding. These are sample arithmetic, not customer results. The offline fixture checks parsing and totals; no live Sheets import was performed for this guide.
Further reading
Part 04
Check types, totals and freshness before analysis
Compare row count, unique invoice keys and totals with the original Busy report. If the totals differ, stop and inspect the export filters, duplicate rows, credit notes, blank amounts and date formats. A successful upload alone does not establish correct accounting data.
Evidence illustration
Validate the reporting copy against its source
A successful import is only a starting state. Compare the rows and totals before relying on a dashboard.

Source
Keep the original export, company and financial-year context available.
Match
Check row counts, dates, amounts and duplicates against that export.
Freshness
Record when the copy was produced and who reviews exceptions.
For the sample, columns G and H contain invoiced and paid amounts. In Calculations, =SUM(Raw!G2:G3)-SUM(Raw!H2:H3) gives 67000. Keep invoice references as text if leading zeros matter. Verify that dates were interpreted as intended for the spreadsheet’s locale rather than silently swapping day and month.
For an ageing exercise, put an explicit as-of date in Calculations!B1. With a recognised due date in Raw!E2, =MAX(0,$B$1-Raw!E2) gives days overdue. At 2026-04-30, the two sample invoices are 15 and 10 days overdue. Use outstanding amounts, not the original invoice totals, in ageing buckets. A changing current-date formula cannot make a stale export current.
Example checks before a reporting copy is accepted
Scroll sideways to see every column →
| Check | Expected sample | If it fails |
|---|---|---|
| Shape | 8 headers and 2 data rows | Correct separator/quoting; re-import into a new tab |
| Scope | DEMO / 2026-27 only | Separate company and year; check source filters |
| Totals | 45000 + 32000 − 10000 = 67000 | Reconcile omissions, duplicates and amendments |
| Freshness | Explicit extraction/import time | Obtain a new export before acting on stale balances |
Part 05
Use IMPORTRANGE only after the source is a spreadsheet
If a second spreadsheet needs the checked Raw data, use its Google spreadsheet URL and range. Replace DEMO_SPREADSHEET_ID below with your source spreadsheet ID; this placeholder is not a working document. The source tab must be named Raw and contain A1:H3. Enter the formula into a clear area of the destination.
You need source access and must explicitly connect the spreadsheets. Google documents a first-use #REF! prompt to allow access. Review destination editors: once connected, any destination editor can pull other source ranges. A small selected range is not a permission boundary.
Google documents update delays and a 10 MB received-data limit per request. Keep ranges bounded and avoid chains and cycles. IMPORTRANGE does not refresh the CSV in Busy or upload a new export; an operator or separately verified process must update the source data.
=IMPORTRANGE("https://docs.google.com/spreadsheets/d/DEMO_SPREADSHEET_ID", "Raw!A1:H3")Further reading
Part 06
Plan refresh and handle failures visibly
A manual CSV import is a snapshot. Set an owner and a freshness threshold suitable for the report. If a refresh fails, keep the last checked snapshot clearly dated, flag the failure and do not label it live. Do not let a partial import overwrite the last reconciled dashboard.
IMPORTDATA is documented for CSV or TSV at a URL. A local file path is not such a URL, and the formula is not an authenticated Busy connector. For private financial data, keep the manual import path or evaluate an authenticated integration rather than exposing a ledger to make a formula work.
For automation, ask for the actual supported Busy interface, required permissions, field mapping, company/year isolation, scheduler, update semantics, failure log and recovery process. There is no verified universal refresh interval in this guide. Google’s Sheets API has per-minute quotas and documents bounded exponential backoff for quota errors; switching from push to pull does not remove those quotas.
Failure checks for each input path
Scroll sideways to see every column →
| Symptom | Check | Next action |
|---|---|---|
| CSV appears in one column | Separator and quoting | Re-import a copy using the right separator |
| Repeated or mixed invoices | Key, company, year, snapshot vs append | Stop refresh and reconcile the source scope |
| #REF! or permission error | Source URL, source access, range, destination access grant | Review permissions; do not broaden sharing blindly |
| Loading, delay or stale values | Source timestamp, range size and chains | Bound ranges and disclose freshness |
| API quota or timeout | Connector logs and project limits | Bound retries; preserve the last accepted snapshot |
Part 07
Build a dashboard that answers one operational question
For receivables, group outstanding amounts into due, 1–30, 31–60, 61–90 and over-90-day buckets at a stated as-of date. Reconcile their sum with the source report. Show disputed invoices separately so a dashboard does not turn a dispute into an automatic reminder.
For inventory, compare stock by warehouse and batch only when those fields exist in the export. Confirm units and stock valuation basis before combining companies or years. For sales, use a consistent net/gross basis and handle returns. A chart should state its filters and last successful refresh.
Forecasting is a separate modelling exercise. Historical sales alone do not establish forecast accuracy; test assumptions, seasonality and missing periods. Keep statutory reports and accounting approvals in their authorised workflow. A spreadsheet dashboard is not evidence of tax or legal compliance.
Candidate report inputs — confirm availability in your installation
Scroll sideways to see every column →
| Report task | Fields to request | Decision check |
|---|---|---|
| Receivable ageing | Invoice key, due date, unpaid balance, dispute status | Who should receive a reviewed follow-up? |
| Inventory planning | Item, unit, warehouse, batch, quantity, extraction time | Is stock low in the right location? |
| Sales review | Period, invoice/return reference, net amount, product | Which changes survive reconciliation? |
| Cash planning | Confirmed receipts/payments and opening balance | What assumptions remain outside the report? |
Part 08
Treat CRM, documents and WhatsApp as separate downstream work
A checked Sheet can be a staging copy for a CRM migration: map customer keys and field types, preview the destination records, and prevent duplicate updates. Do not assume that Salesforce, Zoho or another ERP connector is installed or that every field can be transferred.
For document generation, agree a template, reference and storage permission before creating PDFs. Validate totals and recipients against the accounting record. A Google Sheet by itself does not create invoices or send WhatsApp messages.
A candidate messaging workflow is: checked record → permitted recipient → reviewed template/attachment → configured sending service → recorded result and failure handling. Balance and ledger replies need customer-to-ledger authorisation; a matching phone number alone should not disclose all financial data. Confirm platform/account conditions and supported trigger behavior before a pilot.
Part 09
Keep access narrow and test a recoverable pilot
Use synthetic data first, then obtain approval for a limited real report. Separate who can import, edit calculations and view outputs. Decide retention, deletion and incident handling with the responsible owner; this guide makes no encryption, compliance, audit-log completeness or provider-security assurance.
Before expanding, demonstrate a repeat refresh, a duplicate row, a changed invoice, an unavailable source and a recovery to the last checked snapshot. Record what the operator should see at each failure. Automation is ready only when supported behavior and reconciliation are verified for the intended company and report.
- Choose one report, a data owner and a freshness requirement.
- Reconcile a small sample and document the actual import method.
- Verify permissions and downstream disclosure scope.
- Test refresh, failures and recovery before enabling actions.
- Measure the pilot with real approval; do not infer savings from the sample.
Further reading
Part 10
Google documentation used for the import paths
The linked Google documentation was checked on 29 September 2026 for import syntax, file import options, access behavior and API limits. That check is not a live Busy or Google Sheets integration test, and does not change this article’s source-record publication date.
Questions
Frequently asked questions
Can IMPORTRANGE read a Busy CSV export?
No. Import the CSV through File → Import in Google Sheets. IMPORTRANGE requires a Google spreadsheet URL and a range; use it only after the source is a spreadsheet.
Does a CSV import stay in sync with Busy?
No. It is a snapshot. A person must import a fresh export, or a separately verified connector must update it. Show the extraction time and stop downstream actions when the data is stale.
What if IMPORTRANGE shows a permission error?
Check the source spreadsheet URL, source access and range, then review the destination access grant. Destination editors can import other source ranges once connected, so keep source and destination sharing appropriate.
Can I use IMPORTDATA instead?
IMPORTDATA is documented for CSV or TSV at a URL. It does not import a local file or establish an authenticated Busy connection. Do not publish a private financial export simply to use the formula.
Which Busy fields and sync interval are supported?
Confirm your edition, report, supported interface, mapping, permissions and refresh behavior with the provider. This guide has not verified a particular Busy account, connector or universal sync interval.
Does importing rows send WhatsApp messages?
No. Sending requires a separately configured and verified workflow, permitted recipients, appropriate templates and recorded outcomes. Review customer-to-ledger authorisation before exposing balance or ledger data.
Share this guide
If copying is unavailable, select the article link below.