First-party app
CallRail

CallRail

Read and manage CallRail calls, text messages, form submissions, trackers and companies.

stable MarketingCommunicationAnalytics & BI

About

CallRail ships in the w6w first-party pack. It declares 26 actions, 2 health checks, and the host runs its code in a sandbox that never sees the credential.

App id
io.w6w.callrail
Version
0.1.2
Author
w6w
Licence
MIT
Categories
Marketing · Communication · Analytics & BI

Overview

CallRail is a call-tracking and conversation-analytics platform: it assigns dynamic tracking numbers to marketing channels so a call, text or form submission can be attributed back to whichever campaign produced it. This app puts calls, text-message conversations, form submissions, tracking numbers, tags, companies and users into a workflow — list and read them, place an outbound call, send a one-to-one text, and create or update companies, tags and form submissions.

Everything nests under an account, and within it a company — a separate business or client the account tracks calls for. Every action takes an explicit account id rather than guessing which of a key’s several accounts a call belongs to, since CallRail gives no “primary account” to fall back on; listing accounts is how a workflow discovers which ids a given key can actually reach.

A few sharp edges are handled rather than papered over: placing an outbound call is a real, billed call to a US or Canadian number and is not safe to retry blind; a call recording’s URL comes back as either a long-lived link or a short-lived one depending on the account’s HIPAA status; and outbound text sending is limited to one-at-a-time messages with an opt-out keyword, matching CallRail’s own prohibition on automated bulk messaging. Creating a tracking number is deliberately left out, since its shape depends entirely on the tracker type in a way a static form can’t represent faithfully.

Build with CallRail

Three routes to the same 26 actions. The Workflow tab is generated from CallRail's own manifest and carries its real ids, so it is copy-pasteable; the Code and CLI examples are the same call for any action on any app, so every app-specific value in them is a blank you fill in.

Get Account

account-get

Fetch a single CallRail account, scoped to the provided API key.

List Accounts

account-list

List every CallRail account this API key can access.

Create Outbound Call

call-create

Place an outbound phone call connecting a business number to a customer number. US and Canadian numbers only.

Get Call

call-get

Fetch a single call by id.

List Calls

call-list

List tracked calls in a CallRail account, with filtering, sorting and searching.

Get Call Recording URL

call-recording-get

Get a link to a call's MP3 recording. For HIPAA accounts the URL is temporary (about 24 hours) — re-invoke this action rather than caching it.

Summarize Calls

call-summary-get

Aggregate call counts for an account or company, optionally grouped by source, keywords, campaign, referrer, landing page or company.

Update Call

call-update

Tag or annotate a call, set its lead status, rename the lead, or mark it spam.

Create Company

company-create

Create a new company within a CallRail account.

Get Company

company-get

Fetch a single company by id.

List Companies

company-list

List the companies within a CallRail account.

Update Company

company-update

Update a company's settings.

Create Form Submission

form-submission-create

Record a form submission against a company. Provide either Session ID, or Referrer + Referring URL + Landing page URL.

List Form Submissions

form-submission-list

List form submissions tracked in a CallRail account.

Update Form Submission

form-submission-update

Tag or annotate a form submission, set its monetary value, or set its lead status.

Create Tag

tag-create

Create a tag, scoped to one company or to every company in the account.

Delete Tag

tag-delete

Delete a tag. Removes it from every call flow and interaction it was applied to. To stop new applications without deleting history, use Update Tag with Disabled instead.

List Tags

tag-list

List tags configured within a CallRail account.

Update Tag

tag-update

Rename or recolor a tag, or disable it from being applied to new interactions.

Get Text Conversation

text-message-get

Fetch a text-message conversation and its message history, newest first.

List Text Conversations

text-message-list

List text-message conversations, newest first. Each result carries only the two most recent messages — use Get Text Conversation for the full history.

Send Text Message

text-message-send

Send an SMS (or MMS via a media URL) to a customer, starting or continuing a conversation. Person-to-person use only — automated bulk messaging is prohibited by CallRail's terms.

Get Tracker

tracker-get

Fetch a single tracker by id.

List Trackers

tracker-list

List tracking numbers within a CallRail account.

Get User

user-get

Fetch a single CallRail user by id.

List Users

user-list

List users within a CallRail account.

A workflow step names the app and the action, and the editor fills in the connection when you pick one. This is the Step shape from the workflow spec, carrying CallRail's real ids.

{
  "manifestVersion": "2",
  "name": "callrail-example",
  "steps": [
    {
      "id": "account-get",
      "uses": {
        "app": "io.w6w.callrail",
        "action": "account-get",
        "connection": "conn_YOUR_CONNECTION_ID"
      },
      "with": {
        "accountId": "<accountId>"
      }
    }
  ]
}

Here are some of the things you can do

  • Get Account

    read
    account-get
  • List Accounts

    read
    account-list
  • Create Outbound Call

    perform
    call-create
  • Get Call

    read
    call-get
  • List Calls

    search
    call-list

+21 more actions available

Every app-specific value here is a blank you have to fill in. An app action is reached through the connection that authenticates it, so the address is a connection id, not the app id — and connections belong to your account, so a public page cannot know yours. Create one for CallRail, then fill in the three blanks: conn_YOUR_CONNECTION_ID, the action key, and the parameters that action declares. The call itself is real — the shape is transcribed from the studio's own snippet builder, which prints the same kind of blanks — but nothing in it is specific to CallRail. The Workflow tab is where this app's real ids are.

Install
npm install @w6w/sdk
yarn add @w6w/sdk
pnpm add @w6w/sdk
deno add npm:@w6w/sdk
Code
import { W6wClient, isActionRun } from "@w6w/sdk";

// Reads W6W_BASE_URL and W6W_TOKEN from the environment when omitted.
const client = new W6wClient();

const envelope = await client.run({
  urn: "conn_YOUR_CONNECTION_ID",
  action: "account-get",
  payload: {
    accountId: "<value>",
    // fields: "<value>",
  },
});

if (isActionRun(envelope)) console.log(envelope.value);
Install the CLI
npm install -g @w6w/cli
CLI
w6w run conn_YOUR_CONNECTION_ID --action account-get --payload '{"accountId":"<value>"}'

Give an AI agent CallRail — without giving it CallRail's credentials. One MCP endpoint exposes every app, function and workflow the caller is entitled to, as tools it can discover and run. Access is granted per team while we onboard.

One tool call
{
  "name": "w6w_invoke",
  "arguments": {
    "ref": "app:io.w6w.callrail#account-get",
    "input": {
      "accountId": "<accountId>"
    }
  }
}

Every tool names its target with a single ref. The app: form above doesn't name a connection at all — the host resolves which of the caller's CallRail connections to sign with, and refuses rather than guesses when the answer is ambiguous.

What the agent gets

Credentials it can't read

The token is attached host-side, at the moment of the call. It is never a tool argument, never in the model's context, and never in a transcript — so a prompt injection has nothing to exfiltrate.

A tool surface scoped to the caller

Tools are derived per end user from what that person has actually connected and is entitled to — not one shared bot identity carrying the union of everyone's access.

A durable workflow in one call

Multi-step work runs on the workflow engine and returns a run handle the agent can poll — retries, branching and state survive the conversation that started them.

Health-aware discovery

CallRail's declared health checks are on the surface too, so an agent can tell "the vendor is down" from "your credential expired" before it burns a retry on either.

The MCP surface is part of the hosted platform. CallRail itself is MIT, and the runtime that executes it is source-available (FSL).

Request MCP access

Health checks

CallRail declares its own checks, so its health is a property of the app rather than something the host guesses at.

service

CallRail platform status

Component status from status.callrail.com. Covers the API, Call Tracking, SMS, MMS, Call Routing, Webhooks, Call Recording and Call Transcription, plus the rest of CallRail's own product surface.

quota

Rate-limit headroom

CallRail documents fixed hourly/daily request ceilings but exposes no header or endpoint that reports remaining headroom against them.