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.
Additional information
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.
Frequently asked questions
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?
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.