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.

Deterministic Code
CallRailGoogle SheetsMarketingOperationsData SyncDaily Digests

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?
No. Each run appends new rows under the last filled row, so historical data stays intact and the archive grows day by day.
What happens if a day had hundreds of calls?
The workflow pages through every call CallRail returns for that day, so it does not matter if you logged ten calls or a few thousand. Every row makes it into the sheet.
Can I include call recordings or transcripts?
Yes. The workflow pulls the recording link and other extended fields by default, and you can adjust which fields land in which columns when you set it up.
What if my team uses a different timezone?
You can pick the timezone the date range uses, so yesterday means yesterday in your local business hours rather than UTC.
Do I need a paid Google Workspace plan?
No. A standard Google account that can edit the target spreadsheet is enough.

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.