Weekly lead source ROI report for Workiz and Google Ads
Every Monday, match last week's ad spend to the jobs you actually booked in Workiz, then get the winners, losers, and where to move budget in Slack.
Every Monday at 7am, tell me which of my lead sources are actually making money instead of just making noise. The report covers the previous full week, Monday through Sunday.
Start with Google Ads. Use the Campaign Performance Report operation to pull campaign level clicks, impressions, cost, and conversions for that week. Cost comes back in micros, so divide by one million to get real currency amounts.
Then pull the same period out of Workiz. Use List Leads for every lead created during the week, and List Jobs for the jobs. Both list endpoints return at most 100 records per call, so page through with the offset until you have the whole week. Workiz has no standalone invoice endpoint, so take job value from the amount fields on the job records themselves.
Match the lead source values on the Workiz records against the Google Ads campaign names. Lead source naming is rarely an exact match, so match on close names and treat anything you cannot confidently map as its own unmapped source rather than forcing it into a campaign. When attributing a booked job, prefer the source field on the job record; if jobs do not carry one, match a job back to its lead on client name or phone number.
For every source, work out the number of leads, how many became booked jobs, total job value won, cost per booked job, and return on ad spend. Count a job as booked when its status shows it was scheduled, completed, or otherwise won, and exclude cancelled work. Sources with no matching Google Ads campaign, such as referrals or repeat customers, should still appear with their leads, booked jobs, and job value, leaving cost and return on ad spend blank.
Before writing anything, read the existing rows on the Google Sheets tracking tab with Get Values so you have the prior week's numbers for the same sources. Then append one row per source for the new week using Append Values, starting each row with the week start date, so the tab builds a week over week trend.
Finally, post a summary to Slack with Send a Message. Name the best and worst performing sources, give a concrete recommendation on where to shift budget, and flag any source whose cost per booked job rose more than 25 percent against the prior week's row. Keep it short enough to read on a phone.
What does this prompt do?
- Pulls last week's ad spend, clicks, and conversions from Google Ads alongside every lead and job from Workiz.
- Works out, for each lead source, how many leads came in, how many turned into booked jobs, the revenue won, what each booked job cost you, and the return on your ad spend.
- Adds one row per source to a Google Sheets tab every week, so a week over week trend builds up on its own.
- Posts a Slack summary naming your best and worst sources, recommending where to shift budget, and flagging any source whose cost per booked job jumped more than 25 percent.
What do I need to use this?
- A Workiz account on a plan with the Developer API add-on switched on
- A Google Ads account you can sign in to, plus the customer ID for the account you advertise from
- A Google Sheets spreadsheet with a tab set aside for weekly tracking
- A Slack workspace and a channel where the summary should land
- Lead sources filled in on your Workiz leads, since that is the field matched against your campaigns
How can I customize it?
- Change when it runs. Monday at 7am suits most owners, but a Friday afternoon readout works just as well.
- Adjust the 25 percent jump in cost per booked job that triggers a flag, or add a minimum spend before a source gets called out.
- Send the summary to a different channel, or straight to a manager as a direct message.
- Fold in non ad sources like referrals and repeat customers so you can compare paid against organic side by side.
FAQs
Will this work if some of my leads do not come from ads?
How does it know which Workiz leads came from which campaign?
Where does the job value come from?
Do I need to set up the spreadsheet first?
What happens if a campaign spent money but booked nothing?
Related templates
When someone leaves, we check which shared passwords they used in their final months and post a ranked rotation list to your security channel.
Every Monday, check every S3 bucket for public exposure, missing encryption and weak backup settings, then get the risks ranked in Slack.
Twice every weekday, the conversations from your social inbox land on the right HubSpot contact timelines, with a Slack recap for sales.
Every weekday at 7am, sign in to the tender portals you track, filter new notices against your bid criteria, and open a deal for the ones worth chasing.
Every morning, find the addresses that hard bounced or filed a spam complaint, update the matching HubSpot contacts, and post a short Slack recap.
Every weekday at 4pm, spot the threads that went quiet, stage a ready-to-send nudge in your mailbox, and get a ranked Slack recap.
Stop guessing which ads actually pay for themselves.
Get a weekly readout that ties every dollar of ad spend to the jobs you booked, plus a clear recommendation on where to move budget next.