If you rely on CSV data for daily reports, inventory tracking, or financial reconciliation, you already know the pain of manually importing files into Google Sheets every morning. The good news: you can schedule CSV imports to Google Sheets so your spreadsheets update automatically on a daily, hourly, or weekly cadence. In this guide, I'll walk you through three proven methods — from a free Apps Script solution to plug-and-play add-ons — so you can pick the one that fits your workflow and technical comfort level.
Key Takeaways:Google Apps Script with time-driven triggers lets you schedule CSV imports for free.IMPORTDATA refreshes automatically every hour but has a 50 MB file limit.Over 60% of spreadsheet users spend 1+ hour/week on manual data imports.SmoothSheet handles large scheduled imports via server-side processing at $9/month.
Why Schedule CSV Imports?
Manual CSV imports are fine when you're doing it once. But when you need fresh data in your spreadsheet every day — or multiple times a day — the repetitive upload-and-replace cycle wastes serious time. Here are the most common scenarios where scheduled imports pay off:
- Daily sales and revenue reports: E-commerce platforms like Shopify, WooCommerce, and Stripe export transaction data as CSV. Scheduling the import means your dashboard spreadsheet is always current when you open it each morning.
- Inventory sync: Warehouse management systems export stock levels on a schedule. Auto-importing that CSV keeps your Google Sheets inventory tracker accurate without manual intervention.
- Marketing analytics: Ad platforms, email tools, and CRM systems often provide CSV exports via URL or API. Scheduling these imports lets you build live reporting dashboards.
- Financial reconciliation: Accounting teams that pull bank transaction CSVs daily can automate the import and focus on the actual reconciliation instead of file management.
The bottom line: if you're importing the same type of CSV more than twice a week, automation will save you hours every month. Let's look at the three best ways to set it up.
Method 1: Google Apps Script + Time-Driven Triggers
This is the most flexible free method. Google Apps Script lets you write a small function that fetches a CSV from a URL and writes the data into your spreadsheet, then you attach a time-driven trigger to run it automatically.
Step 1: Open the Script Editor
In your Google Sheets spreadsheet, go to Extensions > Apps Script. This opens the built-in code editor where you'll paste the import function.
Step 2: Paste the Import Function
Replace the default code with the following script. This function fetches a CSV from any publicly accessible URL and writes the parsed data into the active sheet:
function scheduledCSVImport() {
// Replace with your CSV file URL
var csvUrl = "https://example.com/data/export.csv";
// Fetch the CSV content
var response = UrlFetchApp.fetch(csvUrl);
var csvData = response.getContentText();
// Parse the CSV into a 2D array
var rows = Utilities.parseCsv(csvData);
// Get the target sheet (change "Sheet1" to your sheet name)
var sheet = SpreadsheetApp.getActiveSpreadsheet()
.getSheetByName("Sheet1");
// Clear existing data before writing new data
sheet.clearContents();
// Write the parsed data starting at cell A1
if (rows.length > 0) {
sheet.getRange(1, 1, rows.length, rows[0].length)
.setValues(rows);
}
// Log success with timestamp
Logger.log("CSV imported successfully at " + new Date());
}Important notes on the script:
- The CSV URL must be publicly accessible (or accessible with your Google account credentials).
Utilities.parseCsv()handles standard comma-delimited files. For semicolon or tab-delimited files, you'll need a custom parser or convert the file first with a CSV tool before uploading.sheet.clearContents()wipes existing data each run — this is a full replace, not an append.
Step 3: Set Up the Time-Driven Trigger
Click the clock icon in the left sidebar (or go to Triggers) and click + Add Trigger. Configure it as follows:
- Function to run:
scheduledCSVImport - Event source: Time-driven
- Type of time-based trigger: Choose from minute, hour, day, or week intervals
- Interval: For daily imports, select "Day timer" and pick the hour (e.g., 6-7 AM)
Common trigger configurations:
| Frequency | Trigger Type | Setting |
|---|---|---|
| Every hour | Hour timer | Every 1 hour |
| Daily at 7 AM | Day timer | 7 AM to 8 AM |
| Every Monday | Week timer | Monday, 7 AM to 8 AM |
| Every 5 minutes | Minutes timer | Every 5 minutes |
Step 4: Authorize and Test
The first time the trigger fires, Google will ask you to authorize the script to access external URLs and modify your spreadsheet. Click Review Permissions and approve. Then run the function manually once (click the play button) to confirm the CSV imports correctly before relying on the schedule.
Limitations of Apps Script
- 6-minute execution limit: Scripts that run longer than 6 minutes are terminated. For large CSVs (50,000+ rows), this can be a problem.
- URL fetch size limit: The
UrlFetchAppresponse size is capped at 50 MB per call. - Daily quotas: Free Google accounts have a limit of 20,000 URL fetch calls per day; Google Workspace accounts get 100,000.
- No local file support: The script can only fetch from URLs — it cannot pull files from your desktop or local network without additional infrastructure.
Method 2: IMPORTDATA Auto-Refresh
If your CSV is hosted at a public URL, the simplest approach is Google Sheets' built-in IMPORTDATA function. Just type a formula into a cell and Sheets handles the rest.
How to Use IMPORTDATA
In any cell, enter:
=IMPORTDATA("https://example.com/data/export.csv")Google Sheets will immediately fetch the CSV and populate the data starting from that cell, spilling across as many rows and columns as the file contains.
How Often Does IMPORTDATA Refresh?
Google Sheets refreshes IMPORTDATA approximately every hour for files that change frequently. However, the exact refresh interval depends on several factors:
- Google's internal caching (not user-configurable)
- How often the source data at the URL changes
- Sheet recalculation settings (File > Settings > Calculation)
You can force a manual refresh by deleting the formula, pressing Enter, then re-entering it — or by slightly modifying the URL (e.g., appending ?t=1 as a cache-busting parameter).
IMPORTDATA Limitations
- 50 IMPORT functions per spreadsheet: You're limited to 50 total
IMPORTDATA,IMPORTHTML,IMPORTXML, andIMPORTFEEDcalls combined. - Public URL required: The file must be accessible without authentication. Private URLs or files behind a login wall won't work.
- No schedule control: You cannot set a specific refresh time — Google decides when to re-fetch.
- Performance issues with large files: CSVs with more than 10,000-20,000 rows can slow down your entire spreadsheet. For larger datasets, consider server-side import approaches that won't freeze your browser.
Method 3: Third-Party Add-ons
If you need a visual interface, support for authenticated data sources, or handle files larger than what Apps Script can comfortably process, third-party add-ons are the way to go. Here are the most popular options:
Coupler.io
Coupler.io connects to 60+ data sources (including CSV/Excel files from URLs, cloud storage, and APIs) and imports them into Google Sheets on a schedule. It offers a drag-and-drop interface for mapping fields and supports automatic refresh intervals from 15 minutes to daily. The free tier includes 5 data flows with daily refreshes; paid plans start at $49/month for more frequent updates and additional connectors.
Sheetgo
Sheetgo specializes in spreadsheet-to-spreadsheet data transfers, but it also supports CSV imports from Google Drive, OneDrive, and URLs. You can build multi-step workflows that filter, merge, and consolidate data across multiple spreadsheets. Scheduling is available from hourly to monthly. Pricing starts at $22/month after a free trial.
SmoothSheet
SmoothSheet takes a different approach: instead of running imports in your browser (which crashes on large files), it processes CSV and Excel files server-side and writes the data directly into your Google Sheet. This means you can import files that would normally time out or freeze your browser — files with 500,000+ rows or 100 MB+ in size. At $9/month flat, it's the most affordable option for teams that regularly work with large datasets. If your scheduled imports involve big files, SmoothSheet's import approach avoids the browser-crash problem entirely.
Which Method Should You Use?
The best method depends on your file size, technical comfort, and how much control you need over the schedule. Here's a quick comparison:
| Feature | Apps Script | IMPORTDATA | Add-ons |
|---|---|---|---|
| Cost | Free | Free | $9-$49/month |
| Setup difficulty | Medium (code) | Easy (formula) | Easy (UI) |
| Schedule control | Exact (minute-level) | None (~hourly) | Good (15 min-daily) |
| Max file size | ~50 MB | ~20,000 rows | 100 MB+ (SmoothSheet) |
| Authentication support | Yes (custom code) | No | Yes |
| Multiple data sources | Yes (custom code) | One URL per formula | Yes |
| Error handling | Custom (try/catch) | Shows #N/A on failure | Built-in notifications |
| Large file handling | 6-min timeout risk | Slows down sheet | Server-side (SmoothSheet) |
My recommendation:
- Small CSV from a public URL? Start with
IMPORTDATA— it takes 10 seconds to set up. - Need exact scheduling or custom logic? Use Apps Script — it's free and fully customizable.
- Large files or non-technical team? Use an add-on. If your files regularly exceed 50,000 rows, SmoothSheet's server-side processing is the most reliable option.
Frequently Asked Questions
Can I schedule CSV imports from Google Drive instead of a URL?
Yes. With Google Apps Script, you can use DriveApp.getFileById() to read a CSV file from your Google Drive instead of fetching from a URL. Replace the UrlFetchApp.fetch() line with DriveApp.getFileById('YOUR_FILE_ID').getBlob().getDataAsString() and the rest of the script stays the same. The time-driven trigger works identically for Drive-based imports.
How do I append new rows instead of replacing all data?
In the Apps Script method, remove the sheet.clearContents() line and change the write range to start after the last row of existing data. Use sheet.getLastRow() + 1 as the starting row instead of row 1. Keep in mind that appending without deduplication can create duplicate entries, so you may want to add a check for the last imported timestamp or row ID.
What happens if the CSV URL is temporarily unavailable?
With IMPORTDATA, the cells will show a #N/A error until the URL becomes accessible again — your previous data is lost. With Apps Script, you can wrap the fetch call in a try/catch block to keep the existing data intact and send yourself an email notification when the import fails. This is one of the biggest advantages of the script approach over IMPORTDATA.
Is there a way to schedule imports for Excel files, not just CSV?
Google Sheets' IMPORTDATA only works with plain-text formats (CSV, TSV). For Excel files (.xlsx, .xls), you need either Apps Script with a parsing library, or a dedicated add-on that handles Excel format conversion. SmoothSheet supports both CSV and Excel imports natively — so if you're working with mixed file formats, it handles the conversion automatically during the import process.
Conclusion
Scheduling CSV imports to Google Sheets eliminates one of the most tedious parts of working with spreadsheet data. Whether you use a simple IMPORTDATA formula for small public files, build a custom Apps Script for precise control, or rely on an add-on for large-scale enterprise data — the setup takes minutes and saves hours every week.
If your scheduled imports involve large CSV or Excel files that crash your browser or time out during processing, try SmoothSheet. It handles the heavy lifting server-side at $9/month, so your Google Sheets stays fast and your data stays fresh.