Manual Uploads
A spreadsheet we set up for you, or CSV files you upload, for the leads, sales and costs no connection can reach - walk-ins, cash jobs, WhatsApp enquiries, wages and rent.
Some of what your business does never appears in an advertising account. The enquiry that came in on WhatsApp, the walk-in, the cash job, the parts it needed, the wages and the rent. Without them a dashboard knows what your adverts cost and nothing about what they brought in.
Manual Uploads is a Google Sheet we create for you, share with everyone on your account, and read once a day. You log your leads, your sales and your costs in it, and your dashboard works out the rest: revenue, new and returning customers, what a lead and a customer really cost, and profit.
If you don't have a Google account - or your IT won't allow one - you can upload CSV files instead. The files are simpler than the sheet and cover spend, deals and offline revenue only. 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 opens on a Start here page, then four tabs you fill in - Leads, Sales, Costs and Ad Spend - and a Lists tab that holds your own dropdowns.
Start here says what to fill in and when, shows when your sheet was last read, and carries the link that sends your latest rows to your dashboard. It also holds two settings in yellow cells:
- Amounts include VAT? Choose Yes if the amounts you type in Sales include VAT: what the customer paid, and what a job's parts cost you. Revenue and profit are then shown without the VAT. Costs on the Costs tab are always taken as typed.
- VAT rate - only used when the answer above is Yes.
Leads - every enquiry, whether or not it became a job
One row per day for each place enquiries came from, with how many arrived on each channel. Count them from WhatsApp, your call log and your inbox at the end of the day.
| Column | What it's for |
|---|---|
| Date | The day the enquiries came in |
| Source | Where they came from - Google Ads, a referral, a walk-in. From your own list |
| WhatsApp, Calls, Lead forms, Walk-ins, Email | How many arrived that way. Fill in at least one; type 0 if there were none |
| Notes | Anything you want to remember |
| Total | Filled in for you |
Without this tab there is no cost per lead and no conversion rate. Sales alone say what you won, not how many asked.
Sales - one row per job, and the only place revenue goes
One row per job or order, on the day it is done or quoted.
| Column | What it's for |
|---|---|
| Date | The day of the job or the quote |
| Invoice / Job no. | Your own reference, if you have one |
| Customer name | Who it was for |
| Customer ID | Something that identifies the customer the same way every time: a phone number, a car plate, an email |
| Source | Where the customer first came from |
| Came in via | How they got in touch |
| Service | What the job was, from your own list |
| Amount | The amount on the invoice |
| Direct cost | Parts and materials for this job, as on the supplier's receipt |
| Status | Won (done, and revenue), Pending (quoted, not decided) or Lost |
| Payment | Paid or Unpaid |
| Notes | Anything you want to remember |
| Customer type, Revenue (excl. VAT), Gross profit | Filled in for you |
Only jobs marked Won are revenue. Pending jobs count towards your pipeline.
Customer ID is how a returning customer is recognised. Spaces, dashes and the country code don't matter - +971 50 111 2222 and 0501112222 are the same person, and so are X 86649 and x-86649. A job with no Customer ID still counts as revenue, but it can't be called new or repeat, so it shows as Unknown. We keep only a scrambled form of the ID, enough to tell two rows are the same customer - the number you typed stays in your sheet.
Source is how a job is credited. A job whose Source is Google Ads counts towards what Google Ads brought in. A job with no Source is revenue that no channel gets the credit for.
No totals. One row per job - a daily or monthly total typed here would be counted as one very large job.
Costs - what the business pays that is not tied to one job
Salaries, rent, bulk stock, software. Parts for a specific job go on that job's row in Sales instead.
| Column | What it's for |
|---|---|
| Date | The day the cost was paid, or the first day it covers |
| Period end | Leave blank for a one-off cost. For a monthly bill, the last day it covers |
| Category | Direct costs, Staff, Rent & Utilities, Software & Tools, Marketing - other, or Other |
| Description | What it was, in your own words |
| Amount | The figure |
| Notes | Anything you want to remember |
Enter a monthly cost once, with both dates. A 25,000 salary bill covering the whole of August is one row, not thirty - we spread it evenly across the period, so a 7-day view shows a week's share of it.
Marketing - other is for marketing that isn't an ad platform: an agency fee, flyers, an event. It counts towards what a new customer cost you. Every other category is a running cost, used for profit and never counted as advertising.
Never enter ad platform spend here. That has its own tab, and for a connected ad account you enter nothing at all.
Ad Spend - only for an ad platform that is not connected
Leave this tab empty for any ad account that is connected to your dashboard. Its spend, impressions and clicks arrive on their own.
Use it for a platform that isn't connected, one row per day:
| Column | What it's for |
|---|---|
| Date | The day |
| Platform | Google Ads, Meta Ads, TikTok Ads, Snapchat Ads or LinkedIn Ads |
| Spend | As the platform reports it, before VAT |
| Impressions, Clicks | If you have them |
| Notes | Anything you want to remember |
Lists - your own dropdowns
Three lists that become the dropdowns on the other tabs. Change them here and the dropdowns follow.
- Where customers come from. The first five are the ad platforms, shown in grey, and they're fixed - cost per lead and return on ad spend are worked out by those names. Add your own places underneath.
- Your services. Replace Service 1 to 5 with what you sell.
- How they got in touch.
Do this once, when you start.
Every tab you fill in 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. Hover over a heading and it says what goes in that column.
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. Each tab has room for 5,000 rows.
Teal headings are columns you fill in. Grey columns are filled in for you every time the sheet is read, and you can't type in them.
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 Start here page.
- Pick dates from the calendar. Double-click a date cell and choose the day. Dates show with the month spelled out -
12 Aug 2026- so a date read the wrong way round is visible at once. A date typed as text is not counted, and the row says so. - Amounts must be numbers.
4,200is fine.about 4000isn't, and won't be guessed at. - Use your account currency. It's shown on the Start here page. An amount in another currency can't be counted, because converting it needs an exchange rate we don't have - convert it yourself and enter that figure.
- Grey columns are ours. They're filled in automatically, including the Check column that says what happened to each row. You can't edit them 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 on our own - there's nothing you have to send.
If you don't want to wait for that, there are three ways to have it read there and then:
- In the sheet itself. On the Start here page, click Send my rows to the dashboard. A page opens, reads your sheet, and tells you how many rows were read and how many still need fixing. This is the quickest when you've just typed something in.
- On the Manual Uploads screen, press Check for new rows.
- Refreshing your dashboard's data reads your sheet as well as your connected accounts.
Use any of them when you've just added rows, or just fixed one that wasn't counted, and want to see the result now rather than tomorrow. The sheet can be read once a minute.
Whichever you use, the rows are counted the same. It only changes when.
After each read, the Check column on every row tells you what happened to it:
- "Read 2026-08-25" - counted, nothing to do.
- "Read 2026-08-25 - No Customer ID..." - counted, but something is missing that weakens a figure. The message says what: no Customer ID, no Source, or a job marked Won with no amount. These show in amber.
- "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." These show in red.
- "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 Start here page carries a one-line summary of the whole read - the date and time we last looked, how many rows were read, how many weren't counted, and whether anything was left out because a connection covered it.
You can also see it on the Manual Uploads section in Setup: when we last read your sheet, 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.
CSV files are simpler than the sheet. There are three of them - Spend, Deals and leads and Offline revenue - and they give your dashboard your spend and your revenue. They don't carry leads by channel, customer IDs or job costs, so the figures built on those (cost per lead, new and returning customers, profit) come from a sheet only.
A sheet is still better where you can have one, for one reason: we read a sheet every day on our own, and you can ask us to read it again at any time. 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 - up to 2MB a file, and 4MB in a single upload.
Spend - what you spent, on marketing and on running the business
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 |
| Category | Marketing, Cost of sales, Staff, Rent and utilities, or Other running cost |
| Channel | For a marketing cost, where the money went - pick from your own list. Leave blank for other costs |
| 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.
Only Marketing counts as ad spend. Your return on advertising, spend per sale and budget use Marketing rows only - agency fees, print and events included. Parts, stock, wages, rent and other running costs are kept apart and never counted as advertising.
Rows with no Category. If you leave Category blank, a row with a named channel (such as Google Ads or Print) counts as marketing, and a row under Other is treated as a running cost. The Manual Uploads screen says so after the upload, so you can put it right.
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.
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".
If your files hold a daily total AND the individual sales
Plenty of businesses do both - a till total for the day on Offline revenue, and the individual jobs on Deals and leads. That's the same money written down twice, and adding both together would roughly double your revenue.
So we resolve it day by day, and never add the two together:
- Your daily total is larger than the sales you itemised. The difference is takings you didn't list individually - walk-ins, cash, anything that didn't come from an ad. Your daily total is the day's revenue, and the sales you listed tell us which channels to credit for their share.
- They match. One is a summary of the other, so it's counted once.
- The sales you listed add up to MORE than your daily total. Then the daily total can't be the whole day, so we use the larger figure and flag it on Today - one of the two is missing something and only you know which.
Whichever happened, the Manual Uploads screen says so after the upload, with the amounts. If we got it wrong - if that total really does cover sales that aren't in Deals and leads - tell your account team.
You don't have to do both. If everything is itemised in Deals and leads, you don't need daily totals at all, and vice versa. Doing both is fine; it just means we resolve them.
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 Check 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.
- Ad spend and marketing costs are resolved day by day. If you typed Google Ads rows on the Ad Spend tab and Google Ads is then connected, the days it reports are dropped from what you typed and the days before it was connected still count. A cost entered with a period says exactly how much of it counted: "14 of the 31 days counted - Google Ads already covers the rest, so nothing is counted twice."
- Sales is all or nothing. If you connect a CRM and it's returning data, the whole Sales tab stops counting - we can't tell whether a job 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. (The same goes for the Deals and leads file.)
- Leads and running costs are yours alone. Nothing else reports them.
- Offline revenue, in a CSV upload, 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 revenue, jobs, pipeline and top jobs render there, clearly labelled as your own. From a sheet it also shows what the sheet makes possible: leads by channel, new and returning customers, unpaid revenue, profit, and what your advertising returned - your own cost per lead beside the one the ad platform reports, cost per job won, cost per new customer and return on ad spend, with a table by source.
- A check on the sheet itself, at the top of that section. If some won jobs have no Customer ID or no Source, or leads weren't logged on most days, it says so before any figure that depends on them, and those figures carry a Check your sheet note rather than reading as solid.
- 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.
A figure with nothing underneath it shows a dash and the reason - "No leads logged in this period" - rather than a zero. And some things you'd see with a connected CRM aren't shown at all, 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.
The leads, customers and advertising figures show on the 7, 30 and 90 day views. A picked month or a custom date range shows your revenue for now, without them.
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 Check column on the row. It says what happened, and if something needs fixing it says what.
- Check the Start here page 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 - click Send my rows to the dashboard on that page and it will be read straight away.
- If a whole tab is missing from your figures, check the column headings haven't been renamed or deleted.
A figure says 'Check your sheet'
The figure is real, but it's built on rows that are missing something, so it's likely an undercount. Hover over the note and it says what: usually won jobs with no Customer ID (which weakens new and repeat customers) or no Source (which weakens anything credited to a channel), or days with no leads logged.
Fill in what's missing on those rows - their Check cells are amber - and read the sheet again.
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.
My CSV upload was refused as too large
Each file can be up to 2MB, and everything you send in one go up to 4MB. The screen tells you which limit you hit before anything is sent.
- One file over 2MB: split it - by year is usually easiest - and upload the parts separately, or ask your account team to load it for you.
- Several files over 4MB together: upload them in two goes. A section you leave out of an upload is kept exactly as it is, so nothing from the first upload is lost.
For scale, a file of 1,000 rows is a small fraction of the limit.
A date came out as the wrong month
Dates in the sheet are shown with the month spelled out on purpose, so a misread date is visible rather than silent. If you type 03/04 and it redraws as 3 Apr 2026, that's 3 April - which is what a UK or Gulf date means. If it's not what you meant, pick the day from the calendar instead.
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.