Manual Uploads
A spreadsheet we set up for you, or CSV files you upload, for spend, deals and offline revenue that no connection can reach - walk-ins, cash sales, retainers and print.
Some of what you spend and earn never appears in an advertising account. Walk-ins, cash sales, WhatsApp orders, invoiced work, agency retainers, print runs. Without them your return-on-spend is worked out from only part of your income.
Manual Uploads is a Google Sheet we create for you, share with everyone on your account, and read once a day. What you type in it reaches your dashboard the same way a connected platform's data does.
If you don't have a Google account - or your IT won't allow one - you can upload CSV files instead. Same three sections, same figures, same rules. It's one or the other, not both.
Connect the real thing where you can
A connected account is more accurate, needs no typing, and can't be forgotten on a busy week. Use this for the things nothing can connect to - not as a substitute for a connection you could set up.
Where a figure already comes from a connection, anything you type for the same period is left out on purpose, so nothing is ever counted twice. The sheet tells you when that happens, row by row.
Setting it up
Go to Setup and open Manual Uploads - it's the last item in the list, below every real connector. The badge shows 0/1 until a sheet exists and 1/1 once one does.
Click Set up my sheet. It takes a few seconds. We create the sheet, share it with everyone on your account, and start reading it daily.
You set the sheet up on a client's behalf from their Manual Uploads section. Their own users can open and fill it, but the setup button is yours - the same as every other connection. Everyone on the client's account is granted Editor access automatically, and that access follows the account's user list: add or remove a user and their access to the sheet follows.
Everyone on the account gets Editor access automatically. There's no link to share and nothing to send - it appears in their Google Drive under Shared with me.
If a Google Sheet isn't an option for you, choose Upload CSV files instead on the same screen. That's covered further down.
What goes in it
The sheet has three tabs you fill in, plus a Read me tab that explains itself and reports back after every read.
Spend - what you spent on marketing
One row per cost.
| Column | What it's for |
|---|---|
| Period start | The day the cost starts |
| Period end | Leave blank for a single day. For a monthly cost, the last day of the month |
| Channel | Pick from your own list of channels |
| Label | What the cost was, in your own words |
| Amount | The figure |
| Currency | Your account currency |
| Notes | Anything you want to remember |
Enter a monthly cost once, with both dates. A £3,000 retainer covering the whole of August is one row, not thirty - we spread it evenly across the period, so a 7-day view shows the right share of it.
Deals and leads - if you have no CRM connected
One row per deal or lead.
| Column | What it's for |
|---|---|
| Date | When it happened |
| Name | The deal or the customer |
| Stage | New, Qualified, Proposal, Negotiating, Won or Lost |
| Amount | Deal value. Leave blank for a lead with no value yet |
| Currency | Your account currency |
| Source | Where it came from - your channels, plus Walk-in, WhatsApp, Referral and Other |
| Notes | Anything you want to remember |
Only deals marked Won count as revenue. Anything that's neither Won nor Lost counts towards your pipeline.
If you connect a real CRM, this tab stops counting. See "When a connection covers the same thing" below.
Offline revenue - money that never touches a tracked channel
Walk-ins, cash sales, counter takings, invoiced work.
| Column | What it's for |
|---|---|
| Period start | The day it starts |
| Period end | Leave blank for a single day |
| Description | What it was |
| Amount | The figure |
| Currency | Your account currency |
| Channel | If you know what brought them in. Leave blank if not |
| Notes | Anything you want to remember |
Like Spend, a period row is spread evenly across its dates, so a month of counter sales entered once is shared correctly across any date range you look at.
This tab always counts. No connection reports a walk-in, so nothing ever competes with it.
Every tab is laid out the same way: row 1 explains what the tab is for, row 2 is the column headings, and row 3 is a worked example. All three stay on screen as you scroll.
The example is there to be read, not filled in - it's locked, so you can't type over it by mistake and lose what you entered. Start on row 4.
Don't rename the headings or move them. Everything else about the sheet - colours, column widths, extra formatting - is yours to change.
Rules worth knowing before you start
- Don't rename the tabs or the column headings. That's the one thing that stops your numbers being read at all. If a heading is missing we refuse the whole tab rather than guess, and say so on the Read me tab.
- Dates are checked as you type. Type
2026-08-01, or use the date picker. If a cell won't accept what you type, the format is wrong - we'd rather it be refused at your keyboard than read as the wrong month. - Amounts must be numbers.
4,200is fine.about 4000isn't, and won't be guessed at. - Use your account currency. A row in another currency is not counted, because converting it needs an exchange rate we don't have. Convert it yourself and enter that figure. A lead with no value yet isn't affected - the check only applies to rows carrying an amount.
- Grey columns are ours. The Status column is filled in automatically. You can't edit it and don't need to.
How you know it worked
If you upload CSV files, you're told straight away: which sections were updated, which were left alone, which files couldn't be read and why, and every row that wasn't counted with its line number and the reason. It's all on the Manual Uploads screen and stays there until your next upload.
If you have a sheet, we read it once a day. Nothing to send, nothing to click.
After each read, the Status column on every row tells you what happened to it:
- "Read 25 August 2026" - counted, nothing to do.
- "Not counted - ..." - something needs fixing, and the rest of the message says what. "Not counted - Amount must be a number. Remove any currency symbol, spaces or letters."
- "Already covered by ..." - the row is correct exactly as typed, and was left out because a connection already covers it. Nothing to do.
"Not counted" only ever means you have something to fix. A row that's correct but left out says so in plain words instead.
The Read me tab carries a one-line summary of the whole read - when we last looked, how many rows were counted, how many weren't, and whether anything was left out because a connection covered it.
You can also see it on the Manual Uploads section in Setup: last read date, rows counted, and how many need fixing.
Uploading CSV files instead
For anyone on Outlook, without a Google account, or whose IT blocks sharing files with an outside address. Everything below the upload is identical - same three sections, same checks, same rules about connections winning.
A sheet is still better where you can have one, for one reason: we read a sheet every day on our own, and a CSV only changes your figures when you upload it. Nothing updates in between.
You download the templates, fill them in and upload them yourself, whenever they change.
Anyone on your account can download the templates and fill them in, but the upload itself is your account team's - the same as setting up a sheet, and the same as every other connection. Send them the finished files and they will load them for you. What you see afterwards - which sections changed, and any rows that were not counted - is the same either way.
How it works
- On Setup -> Manual Uploads, download the section you want to fill in. There's one file per section:
Spend.csv,Deals and leads.csv,Offline revenue.csv. - Fill it in. Each file carries one worked example row showing what to type.
- Upload it back. You can send one file or all three at once.
You never say which section a file is. We read that from its column headings, so a file can't be filed under the wrong section by mistake. That's also why the top row matters more here than anywhere else: rename or delete a heading and we can't tell what the file is, so we'll refuse it and say which heading is missing.
The example row is never counted, whether you delete it or leave it in place. Type over it or start on the row below - either is fine.
Uploading one section never changes the others
This is the part worth reading twice.
Anything you don't upload is left exactly as it was. Upload a corrected Spend file and your deals and offline revenue are untouched - not re-read, not re-checked, not removed. After every upload we tell you which sections changed and which were left alone, so you never have to go and check.
The consequence: leaving a file out doesn't delete anything. If you actually want to clear a section - say you've decided your deals now come from a connected CRM and the old typed ones should go - upload that section's file with the headings and no rows underneath. An empty file means "nothing here"; a missing file means "don't touch it".
Files from Excel
Excel writes CSV files differently depending on your computer's regional settings - on many machines it separates columns with semicolons rather than commas. You don't need to do anything about this. We work out which one your file uses. Tab-separated files are read too.
If your file opens correctly in your own spreadsheet program, it will read correctly here.
What you can't do from a CSV
- You can't have both a sheet and CSV uploads. If a Google Sheet is already set up for your account, uploads are refused - add your rows to the sheet instead.
- Nothing is read on a schedule. Your figures change when you upload and not before.
- There's no Status column to read. With a sheet, the reason a row wasn't counted is written next to that row. There's nowhere to write that on a file sitting on your computer, so we list every rejected row - section, line number and reason - on the Manual Uploads screen after each upload, and it stays there until the next one.
When a connection covers the same thing
A connected account always wins. You can never double-count by typing something in that's also being fetched.
- Spend is resolved day by day, per channel. If Google Ads is connected and reporting for the first half of a month, and you've entered a cost covering the whole month, the half it already covers is dropped and the rest still counts - the row tells you exactly how much: "14 of the 31 days counted - Google Ads already covers the rest, so nothing is counted twice."
- Deals and leads is all or nothing. If you connect a CRM and it's returning data, the whole tab stops counting - we can't tell whether a deal you typed is the same deal your CRM already has, so we don't guess. Your rows stay in the sheet and each one says why it was left out.
- Offline revenue always counts. Nothing else reports it.
A CRM that's connected but hasn't returned any data yet doesn't take over - your typed deals keep counting until real data arrives.
Where it shows up
- Your dashboard figures. Spend, revenue and return-on-spend include what you've entered, and any figure that does is marked "Manual uploads" or "Incl. manual uploads" so you can always tell.
- The CRM section, if you have no CRM connected - your deals, pipeline and top deals render there from the sheet, clearly labelled as your own.
- Reports, and anything you ask. Your figures are included and described as self-reported rather than as something a connection measured. What the sheet adds that nothing else can see - revenue arriving off-channel, spend with no ad account behind it - is remembered, so it shapes answers rather than having to be re-explained each time.
Some things you'd see with a connected CRM aren't shown from a sheet, because a spreadsheet can't answer them honestly. There's no UTM tracking score - a row you typed never had a link to tag - and no deal velocity, because the tab records one date rather than an opened-and-closed pair.
Reminders, and turning them off
If rows weren't counted on the last read, or the sheet hasn't changed in a long while, you'll see it on Today.
These only ever appear once you've actually used the sheet. Setting one up and leaving it empty won't nag you.
If you've stopped using it, open Setup -> Manual Uploads and choose Stop reminding me. The reminders stop for good. Your sheet stays where it is and what's already in it keeps counting - switching the reminders off doesn't take anything off your dashboard.
If something looks wrong
My rows aren't showing up
- Check the Status column on the row. It says what happened, and if something needs fixing it says what.
- Check the Read me tab for when we last read the sheet. We read once a day, so a row added this morning may not have been picked up yet.
- If a whole tab is missing from your figures, check the column headings haven't been renamed or deleted.
A row says it was 'already covered'
That's not an error. A connected account is reporting the same thing, so your row was left out to stop it being counted twice. Nothing to fix - and if you disconnect that platform, your row starts counting again on the next read.
My CSV was refused - 'we could not tell which file this is'
We work out which section a file belongs to from its top row of headings, so that row has to match the template exactly. A renamed, deleted or reordered heading is the usual cause - reordering the columns themselves is fine, it's the heading text that matters.
The message names the headings it couldn't find. Add them back, or start again from a fresh download.
I uploaded one file and I'm worried it wiped the others
It didn't. Anything you don't upload is left exactly as it was, and after every upload we say which sections changed and which were left alone.
If you genuinely want to empty a section, upload that file with its headings and no rows underneath.
Both files were refused as the same section
Two files can't both be your Spend, because we'd have no way to know which one you meant - and picking one would quietly throw away the other. Upload one, then the other.
This usually means an old copy got picked up alongside the new one.
A date came out as the wrong month
Dates in the sheet are shown as YYYY-MM-DD on purpose, so a misread date is visible rather than silent. If you type 03/04 and it redraws as 2026-04-03, that's 3 April - which is what a UK or Gulf date means. If it's not what you meant, retype it in full.
I opened the sheet and it's read-only
Editor access follows the account's user list. If you've just been added to the account, sign out of Google and back in - the grant may have landed after your current session started.
If it persists, open Get help (top right) and we'll re-share it.
If it persists, ask your account manager to re-share it - re-running the client's setup re-grants access to everyone currently on the account.
For anything else, see Error messages explained.