Skip to content
TheShopMarketing Guys

Setup and results

See what's left to set up and how your marketing is doing. Where a number has a catch, we say so.

Overview

Two questions come up more than any others. Where are we with setup? And is the marketing working? Your assistant can answer both from the same records our team uses.

During setup, ask what's left. It tells you what's done, what we're working on, and what's waiting on you. For anything that's on you, it gives you the link to do it.

Once you're up and running, ask how things went for any stretch of time. You'll see revenue we can trace to your marketing, plus leads, calls, reviews, and how your campaigns did. It also covers what we published, your ads if they're connected, and what our team did. Want the detail behind a number? Ask. It can pull revenue, jobs, average job, new customers, and more, and it says where each one came from.

Where a number has a catch, we say so. Maybe the month isn't over, or a system isn't connected yet. Your assistant tells you the catch word for word. We'd rather show you an honest number with its limits than a clean one we can't stand behind.

You can also do this in your workspace. Look in Home (/workspace).

The tools on this page

Setup and results: what each tool reads, writes, and asks
ToolReadsWritesAsks you first
What's left in setupYesNoNo
How marketing is doingYesNoNo
Your numbersYesNoNo

What's left in setup

get_onboarding_statusReads only

What you can ask

  • What's left to finish setting up my account?
  • What do you need from me?

What it does

Your setup steps: what's done, what we're working on, and what's waiting on you.

What your assistant sends

Nothing. Your assistant just runs it.

Example: what your assistant sends
{}
Example: what comes back
{
  "setup": "in progress",
  "done": 4,
  "total": 6,
  "your_moves": [
    "Connect Google"
  ],
  "home": "https://www.theservicemarketingguys.com/workspace/esg",
  "steps": []
}

How marketing is doing

get_marketing_summaryReads only

What you can ask

  • How's my marketing doing this month?
  • What did your team work on for us in September?
  • How many reviews did we get this quarter?

What it does

How your marketing did over any stretch of time, from leads and reviews to what our team did.

What it won't do

Where a number has a catch, your assistant tells you, word for word. If we can't stand behind a number, it says so instead of guessing.

What your assistant sends

FieldRequiredDescription
periodone of: this_month, last_month, quarter, trailing_3, trailing_12NoDefault this_month (month to date). trailing_N is the last N full months.
Example: what your assistant sends
{
  "period": "last_month"
}
Example: what comes back
{
  "period": {
    "label": "August 2026",
    "start": "2026-08-01",
    "end": "2026-08-31",
    "as_of": "2026-09-24T16:00:00.000Z"
  },
  "revenue": {
    "attributed": "at least $48,210",
    "jobs": "at least 61",
    "new_customers": "23",
    "caveat": "Revenue and jobs count only work we can tie to our marketing. Undercounts install revenue; treat as floor."
  },
  "leads": {
    "calls": "97",
    "forms": "31",
    "chats": "9",
    "bookings": "12",
    "total": "140",
    "caveat": "Total is calls, forms, and bookings. Chats are text conversations with your assistant, one per number, and are not in the total."
  },
  "reviews": {
    "new": "14",
    "average_rating": "4.8",
    "unreplied": "2",
    "caveat": "New counts reviews posted in this period. The rating and unreplied count are where you stand today."
  },
  "campaigns": {
    "sent": "1",
    "results": [
      {
        "name": "Fall tune-up",
        "channel": "email",
        "sent_at": "2026-08-19T15:00:00.000Z",
        "sent": "400",
        "delivered": "390",
        "opened": "n/a",
        "clicked": "n/a",
        "replied": "n/a",
        "opt_outs": "n/a"
      }
    ],
    "caveat": "Open and click tracking is off to protect deliverability, so opened and clicked show n/a. Email unsubscribes are not tied to one campaign; the current opt-out total is in get_campaign_context."
  },
  "content": {
    "pages_edited": "3",
    "blog_posts": "2",
    "gbp_posts": "4",
    "caveat": "Pages edited counts distinct website pages changed through our editing tools; changes made another way are not counted. Posts count what was published in this period."
  },
  "ads": {
    "connected": false
  },
  "what_we_did": [
    "Aug 12: Published an article: When to replace brake pads"
  ],
  "caveats": [
    "Every figure here is a display string with its caveat; repeat it as written, not as an exact number."
  ]
}

Your numbers

get_client_metricsReads only

What you can ask

  • How many new customers did we get last month?
  • What was our average job last quarter?

What it does

The numbers behind your summary, like revenue, jobs, new customers, leads, calls, and reviews. Each says where it came from and any catch.

What it won't do

Some numbers have a catch, like a month that isn't over or a system that isn't connected yet. Your assistant tells you the catch. It won't pass off a rough number as exact.

What your assistant sends

FieldRequiredDescription
periodone of: month, quarter, year, trailingNoAggregation window. Defaults to the last complete calendar month.
monthintegerNo1-12, with period "month" and year.
yearintegerNoCalendar year, for month, quarter, and year periods.
quarterintegerNo1-4, with period "quarter". Defaults to the current quarter.
trailingMonthsintegerNoWith period "trailing". Defaults to 3.
Example: what your assistant sends
{
  "period": "quarter",
  "quarter": 3,
  "year": 2026
}
Example: what comes back
{
  "client": {
    "slug": "esg",
    "name": "Example Service Group"
  },
  "period": "Q3 2026",
  "metrics": {
    "attributedRevenue": {
      "value": 48210.5,
      "unit": "usd",
      "period": "Q3 2026",
      "source": "revenue_attribution + service_history via getROIReportData",
      "caveats": [
        "undercounts install revenue; treat as floor.",
        "source aggregation reports failed reads as empty; treat a surprising 0 as suspect and verify in the dashboard"
      ]
    },
    "attributedJobs": {
      "value": 61,
      "unit": "count",
      "period": "Q3 2026",
      "source": "revenue_attribution + service_history via getROIReportData",
      "caveats": [
        "undercounts install revenue; treat as floor.",
        "source aggregation reports failed reads as empty; treat a surprising 0 as suspect and verify in the dashboard"
      ]
    },
    "avgJobValue": {
      "value": 803.51,
      "unit": "usd",
      "period": "Q3 2026",
      "source": "revenue_attribution + service_history via getROIReportData",
      "caveats": [
        "undercounts install revenue; treat as floor.",
        "source aggregation reports failed reads as empty; treat a surprising 0 as suspect and verify in the dashboard"
      ]
    },
    "newCustomers": {
      "value": 23,
      "unit": "count",
      "period": "Q3 2026",
      "source": "customers (acquired_via_tmg) via getROIReportData",
      "caveats": [
        "source aggregation reports failed reads as empty; treat a surprising 0 as suspect and verify in the dashboard"
      ]
    },
    "leads": {
      "value": 140,
      "unit": "count",
      "period": "Q3 2026",
      "source": "activities (calls, forms, scheduling requests, after-hours and online bookings) via getROIReportData",
      "caveats": [
        "Counts interactions per month, summed across months, not distinct people; a caller who phones twice counts twice, so this can overcount unique leads.",
        "source aggregation reports failed reads as empty; treat a surprising 0 as suspect and verify in the dashboard"
      ]
    },
    "calls": {
      "value": 97,
      "unit": "count",
      "period": "Q3 2026",
      "source": "activities (activity_type = call_received)",
      "caveats": [
        "Answered/duration breakdown is not available: the activities table has no dedicated columns for it."
      ]
    },
    "schedulingRequests": {
      "value": 12,
      "unit": "count",
      "period": "Q3 2026",
      "source": "scheduling_requests",
      "caveats": []
    },
    "reviewRating": {
      "value": 4.8,
      "unit": "stars of 5",
      "period": "current standing",
      "source": "google_reviews (exact count + row average, upgraded to Places API when available)",
      "caveats": [
        "Reflects current standing, not the requested period."
      ]
    },
    "reviewCount": {
      "value": 312,
      "unit": "count",
      "period": "current standing",
      "source": "google_reviews (exact count + row average, upgraded to Places API when available)",
      "caveats": [
        "Reflects current standing, not the requested period."
      ]
    }
  },
  "newCustomersByChannel": {
    "google_business": {
      "label": "Google Business",
      "count": 15
    },
    "google_ads": {
      "label": "Google Ads",
      "count": 8
    }
  }
}
Check setup and results through your assistant | The Shop Marketing Guys