Automate Daily CSV Reports with a Free CSV Tool
2026-10-02 · 5 min read
Automate Daily CSV Reports for Free in 5 Minutes
If you get a new CSV file in your inbox every morning, you are not alone.
Why automate CSV reports?
Downloading, opening, and joining two or three files by hand takes about five minutes. Over a month that adds up to an hour of wasted time. The real cost is higher: you may miss rows, see inconsistent formats, and make copy‑paste mistakes.
Common pain points
- Files arrive at different times (e.g., 8 AM from sales, 8:15 AM from inventory).
- Column headers are not identical ("Qty" vs "Quantity").
- The final report must be emailed to a manager by 9 AM.
Benefits of a free CSV automation tool
- Speed – The whole process runs in seconds.
- Reliability – The same steps happen every day, so human errors disappear.
- Visibility – You can log each step and receive a notification if something goes wrong.
Choosing a free tool
You do not need a paid service to get the job done. Below are three free options that cost $0.
- Google Apps Script – A small program that runs inside Google Drive. It works with Google Sheets and Gmail and can be set to run at a specific time.
- Zapier Free – Allows up to 100 tasks each month, which is enough for one daily report.
- Make (formerly Integromat) Free – A visual builder that lets you connect steps together. The free plan gives you 1 000 operations each month.
All three tools can pull files from email, merge them, and send the result. The guide below uses Google Apps Script because it does not require an extra account and gives you full control over the code.
Step‑by‑step: Build a simple workflow with Google Apps Script
1. Create a new script project
- Open Google Drive.
- Click New → More → Google Apps Script.
- Rename the project to *Daily CSV Merger*.
2. Grant access to Gmail and Drive
When you run the script for the first time, a dialog will ask for permission. Click Allow. The script needs to read email attachments and write the merged file back to Drive.
3. Write the merge function
Paste the following code into *Code.gs*:
function mergeCSVFiles() {
// 1. Find unread emails with CSV attachments from the last 24h
var threads = GmailApp.search('is:unread has:attachment filename:csv newer_than:1d');
var csvData = [];
threads.forEach(function(thread) {
var msgs = thread.getMessages();
msgs.forEach(function(msg) {
var attachments = msg.getAttachments();
attachments.forEach(function(att) {
if (att.getContentType() === 'text/csv') {
var text = att.getDataAsString();
var rows = Utilities.parseCsv(text);
csvData = csvData.concat(rows);
}
});
// Mark the email as read so we don’t process it again
msg.markRead();
});
});
// 2. Remove duplicate header rows (assume first row is header)
var header = csvData[0];
var uniqueRows = [header];
var seen = {};
for (var i = 1; i < csvData.length; i++) {
var key = csvData[i].join('|');
if (!seen[key]) {
seen[key] = true;
uniqueRows.push(csvData[i]);
}
}
// 3. Write the merged CSV back to Drive
var blob = Utilities.newBlob(
Utilities.formatString('%s', uniqueRows.map(row => row.join(',')).join('\n')),
'text/csv',
'daily_report.csv'
);
var file = DriveApp.createFile(blob);
// 4. Email the result
MailApp.sendEmail({
to: 'manager@example.com',
subject: 'Daily CSV Report',
body: 'The merged report is attached.',
attachments: [file]
});
}
4. Test the script
- Click the Run button.
- If an error appears, open the *Executions* log to see details.
- Check that a file named *daily_report.csv* shows up in Drive and that the manager receives the email.
5. Schedule the run
- In the script editor, go to Triggers → Add Trigger.
- Choose *mergeCSVFiles* as the function.
- Set the event source to *Time‑driven* and pick *Day timer → 8 AM to 9 AM*.
- Save the trigger.
Now the script will run automatically each morning.
Scheduling the job without code (Zapier alternative)
If you prefer a point‑and‑click solution, Zapier’s free tier can replace steps 1‑4:
- Trigger – New Email Matching Search (Gmail).
- Action – Find CSV Attachments (Zapier built‑in).
- Action – Formatter → Utilities → CSV → Merge.
- Action – Send Email (Gmail) with the merged file.
Set the Zap to run daily at 8:30 AM. This method does not include the duplicate‑row logic, but it works well for simple reports.
Alternative: Using Make.com for visual debugging
Make.com shows your workflow as a diagram. A typical flow looks like this:
- Watch Emails module → CSV Aggregator → Google Drive > Upload a File → Gmail > Send an Email.
The free plan gives you 1 000 operations each month – roughly 30 daily runs with a few attachments each.
What to watch out for
- Attachment size – Google Apps Script can only handle files up to 10 MB. Larger files need a cloud storage bucket.
- Timezone – Triggers use the script’s default timezone. Adjust it in *Project Settings* to avoid a one‑hour drift.
- Error handling – Wrap the main loop in a
try/catchblock and send a failure email if something goes wrong.
Wrap up
You now have a complete, cost‑free pipeline: fetch CSVs from email, merge them, remove duplicate rows, store the result, and email it to the right person – all automatically. You can expand the same pattern to pull files from FTP, Google Drive folders, or even a public URL. The only limit is your imagination, not your budget.