Daily CallRail call log to Google Sheets
Every morning, archive yesterday's CallRail calls into a Google Sheets tab so marketing and ops can pivot the data and join it with other sources.
Build a code workflow that archives the prior day's CallRail call activity into a Google Sheets tab every morning, so our marketing and ops teams can pivot on the data outside of CallRail.
Trigger: cron, every day at 6:00am America/New_York. CallRail does not have a poll trigger in our platform, so use a schedule.
Step 1: Call CallRail's List All Calls operation for the configured account. Use a date range covering all of yesterday in the account's business timezone (default America/New_York), expressed as start_date and end_date. Paginate through every page (per_page=250) until total_pages is exhausted, accumulating all calls. Request the extended fields needed for analysis via the fields parameter: caller_name, customer_phone_number, source, campaign, keyword, landing_page_url, tracking_phone_number, duration, answered, lead_status, value, tags, recording, transcription.
Step 2: Transform each call into one spreadsheet row with this fixed column order: call_date (ISO date), caller_name, customer_phone_number, source, campaign, keyword, landing_page_url, tracking_phone_number, duration_seconds, answered (Yes/No), lead_status, value, tags (comma-separated), recording_url. Missing values should be empty strings.
Step 3: Call Google Sheets Append Values on the configured spreadsheet ID and tab name (for example 'Call Log!A:N'). Use valueInputOption=USER_ENTERED and insertDataOption=INSERT_ROWS so Google formats dates and numbers normally and rows are inserted rather than overwriting any chart ranges. Send all rows in one append call when possible.
Inputs that should be configurable at setup: spreadsheet_id, sheet_tab_name, timezone (default America/New_York), and run hour (default 6). Everything else (column order, fields list, page size) can be fixed in the workflow.
If CallRail returns zero calls for yesterday, finish successfully without writing any rows. If the append fails, surface the error so the run is marked failed. This is a deterministic pipeline, so it should be a fixed list-then-append flow, not an agent.
What does this prompt do?
- Runs every morning at 6am Eastern and pulls every call CallRail logged yesterday, including caller name, phone number, source, campaign, keyword, landing page, tracking number, duration, answered status, lead status, value, tags, and recording link.
- Appends one row per call to a Google Sheets tab you choose, in a stable column order so your pivot tables and lookups keep working.
- Builds a complete daily call archive you can join with ad spend, CRM data, or revenue numbers in the same spreadsheet.
- Runs on a fixed schedule with no manual exports, so the log stays current even when nobody is in the office.
What do I need to use this?
- A CallRail account with API access turned on, plus the account ID and an API key.
- A Google account that can edit the spreadsheet you want to use as the archive.
- A Google Sheets spreadsheet with a tab set aside for the call log, with header row already in place if you want one.
How can I customize it?
- Change the run time or timezone if your team works in a different region or wants the log ready earlier.
- Pick a different tab or spreadsheet by swapping the sheet name and ID, or split high and low value calls into separate tabs.
- Add or remove columns to match how your team likes to slice the data, for example dropping recording links or including notes.
FAQs
Will this overwrite my existing call log?
What happens if a day had hundreds of calls?
Can I include call recordings or transcripts?
What if my team uses a different timezone?
Do I need a paid Google Workspace plan?
Related templates
Every weekday at 10am, an AI voice agent phones your most overdue Xero accounts, logs what each customer promised, and reports back to finance in Slack.
See every Google Maps listing you manage on one screen, ranked worst first, with an audit button that writes the fix list for you.
Your team picks a template, finds the customer, checks they are safe to email, then sends it, with every send logged where the whole team can see it.
Every night at 2am, pull the contacts on your open and won deals and block them from your cold outreach before the next send goes out.
Build every text campaign in one screen: check who is actually reachable, see a realistic send plan, then watch delivery land row by row.
See every LinkedIn ad account's spend against the budget you committed to, catch overspend early, and rebalance without rebuilding a spreadsheet.
Stop exporting CallRail spreadsheets by hand.
Connect CallRail and Google Sheets once, and Geni archives yesterday's calls into your log every morning at 6am.