Build an audience

Walkthrough

Build and activate an audience with Claude and Verity MCP

In Claude, with the Verity connector, you describe an audience in plain language. Claude looks up what you know about your customers, counts who matches, and saves the segment as a draft in Verity. Sending it to a destination such as Meta Ads, Google Ads, Brevo, Klaviyo or ActiveCampaign comes back as a review link: a person approves it in Verity, and only then does the sync run.

The tool calls and answers on this page were recorded on Verity staging on 13 November 2026, on a test dataset of 25,000 customer profiles. Ids and the project name are replaced. Where an answer was not recorded, the page says what the tool returns and shows no made up output.

Before you start

Add Verity as a custom connector in Claude, with the server address you find in Verity under Settings, MCP Connections. You sign in with Google, choose the account and workspace, and choose read only or read and write. Steps 1 and 2 work on a read only connection. Saving the segment needs read and write. Asking for the sync needs an account owner or admin.

The segment is built on the customer profiles in your own BigQuery, so there is no second copy of your customers to keep in sync. Every tool on this page is in the MCP tool reference, with its access level.

STEP 1

Read

Explore what you know about your customers

You ask

Which customer details can I build an audience on?

Claude starts by reading the customer profile: one row per customer, in your own BigQuery. It asks Verity which details a segment can use, such as country, number of orders, lifetime value and carts left behind in the last 30 days.

Details that identify a person, such as an email address or a first name, come back marked as identity. An agent can build on the fact that they exist, and can never estimate or preview a segment by filtering on one person’s value.

Claude answers

You can build on where customers live, how often and how much they ordered, their lifetime value, when they were last seen, the channel that brought them in and the carts they left behind.

explore_segment_source

Recorded on staging

Claude sends

{
  "data_source_id": "ds_EXAMPLE",
  "table": "customer.customer_profiles"
}

Verity answers

{
  "data_source_id": "ds_EXAMPLE",
  "table_fqn": "your-project.customer.customer_profiles",
  "columns": [
    { "name": "email", "type": "STRING", "identity": true },
    { "name": "first_name", "type": "STRING", "identity": true },
    { "name": "country", "type": "STRING" },
    { "name": "customer_type", "type": "STRING" },
    { "name": "total_orders", "type": "INT64" },
    { "name": "lifetime_value", "type": "FLOAT64" },
    { "name": "last_seen_at", "type": "TIMESTAMP" },
    { "name": "top_channel", "type": "STRING" },
    { "name": "cart_abandons_30d", "type": "INT64" }
  ],
  "truncated": false,
  "verity_tool_contract": "dd8291bdaf75"
}

Shortened to 9 of the 23 fields in the answer.

STEP 2

Read

Estimate the size before you save anything

You ask

How many customers in the Netherlands have ordered before and left a cart behind in the last 30 days? And how many if they ordered at least twice?

Claude turns the sentence into a draft definition and asks Verity to count it in the warehouse. Nothing is saved. The answer is a count, the size of the whole customer base and the share, never a list of people. A count below ten reads “fewer than 10”.

Sizing is where the conversation earns its keep. You tighten or loosen the audience in words and see the number move: 845 customers with at least one order, 701 with at least two.

Claude answers

845 customers in the Netherlands ordered before and left a cart behind in the last 30 days, 3.4% of your 25,000 customers. With at least two orders it is 701, or 2.8%.

estimate_segment

Recorded on staging

Claude sends

{
  "data_source_id": "ds_EXAMPLE",
  "table_fqn": "your-project.customer.customer_profiles",
  "definition": {
    "type": "group",
    "operator": "AND",
    "negate": false,
    "children": [
      { "type": "rule", "column": "country", "operator": "eq", "value": "NL" },
      { "type": "rule", "column": "total_orders", "operator": "gte", "value": 1 },
      { "type": "rule", "column": "cart_abandons_30d", "operator": "gte", "value": 1 }
    ]
  }
}

Verity answers

{
  "status": "estimated",
  "count": 845,
  "total": 25000,
  "percentage": 3.38,
  "estimated_scan_bytes": 319668,
  "verity_tool_contract": "dd8291bdaf75"
}
estimate_segment

Recorded on staging

Claude sends

{
  "data_source_id": "ds_EXAMPLE",
  "table_fqn": "your-project.customer.customer_profiles",
  "definition": {
    "type": "group",
    "operator": "AND",
    "negate": false,
    "children": [
      { "type": "rule", "column": "country", "operator": "eq", "value": "NL" },
      { "type": "rule", "column": "total_orders", "operator": "gte", "value": 2 },
      { "type": "rule", "column": "cart_abandons_30d", "operator": "gte", "value": 1 }
    ]
  }
}

Verity answers

{
  "status": "estimated",
  "count": 701,
  "total": 25000,
  "percentage": 2.8,
  "estimated_scan_bytes": 319668,
  "verity_tool_contract": "dd8291bdaf75"
}

STEP 3

Write

Save the segment as a draft

You ask

Save the second one as a segment called “NL repeat buyers with an abandoned cart”.

Saving is the first step that changes something, so it needs a connection with read and write access. Verity checks the definition against the warehouse and saves the segment in your workspace. Saving never sends the segment anywhere. The answer carries the outcome and the saved segment, with the id Claude uses in the next steps.

Write access is switched on per account, and you choose read only or read and write when you connect. When we recorded this walkthrough the staging account had write access switched off, and the server refused the call. That refusal is the answer below, unedited.

Claude answers

With write access: the segment is saved as a draft. It is not sent anywhere yet.

save_segment_draft

Recorded on staging

Claude sends

{
  "name": "NL repeat buyers with an abandoned cart",
  "description": "Customers in the Netherlands with two or more orders who left a cart behind in the last 30 days.",
  "data_source_id": "ds_EXAMPLE",
  "table_fqn": "your-project.customer.customer_profiles",
  "definition": {
    "type": "group",
    "operator": "AND",
    "negate": false,
    "children": [
      { "type": "rule", "column": "country", "operator": "eq", "value": "NL" },
      { "type": "rule", "column": "total_orders", "operator": "gte", "value": 2 },
      { "type": "rule", "column": "cart_abandons_30d", "operator": "gte", "value": 1 }
    ]
  }
}

Verity answers

{
  "error": "Write access through MCP is not enabled for this account. An account administrator can enable it in Verity settings.",
  "verity_tool_contract": "dd8291bdaf75"
}

The answer on an account without write access. With write access the answer has "outcome": "saved" and the saved segment.

STEP 4

You approve

Ask for the sync and get a review link

You ask

Send this audience to Meta Ads.

A destination sends customers to an ad or email platform on a schedule, so every change to one is made by a person: adding it, adding a segment to it, pausing it, running it now. The tool Claude calls changes nothing. It checks that you may make the change and answers with a review link, the page in Verity where you make it, and a short message that says what to do there. Claude hands you that link.

Before it asks, Claude looks at where segments can already go. On our staging account no destination was set up yet, so the list came back empty, and the request becomes one to add a destination.

Claude answers

There is no Meta Ads destination yet. Open this link to add it in Verity and choose the segment. Nothing is sent until you approve it there.

list_destinations

Recorded on staging

Claude sends

{}

Verity answers

{
  "destinations": [],
  "count": 0,
  "total": 0,
  "verity_tool_contract": "dd8291bdaf75"
}

Claude sends

{
  "action": "create"
}

Answers with a review link and a message. With a destination already in place, the action is "link_segment" with that destination’s id.

STEP 5

In Verity

A person approves it in Verity

You open the review link and land on the change in Verity. There you add the destination, choose the segment, set how often it refreshes and decide which customer details go along. Or you close the page and nothing happens.

This step has no tool, on purpose. An agent acts as the person who connected it and never more, and anything with an effect outside Verity waits for a person. The approval is yours, under your own sign in.

No tool call here

The agent has no tool that approves a sync. The step happens in Verity, by a person with the right role.

STEP 6

Read

The sync runs, and Claude can tell you how it went

You ask

Did the audience arrive?

After the approval Verity sends the audience to the platform and keeps it fresh on the schedule you set. Customers who no longer match are removed on the next run. Audience sync is live today for Meta Ads, Google Ads, Brevo, Klaviyo and ActiveCampaign.

Claude can read the result back: the status of the destination, the next run, and for the last run its status, its times and how many customers it sent. It reads what Verity last stored and does not query the platform itself.

Claude sends

{
  "segment_id": "seg_EXAMPLE"
}

Answers with the destinations of that segment and the time of the last sync per destination.

The tools in this walkthrough

Read tools change nothing. Write tools change a draft inside Verity. Tools marked You approve open the change for a person and return a review link. That last group is why an agent can do the work and you still decide what reaches your customers.

ToolAccess levelWhat it does
explore_segment_sourceReadLists the customer details a segment can use.
get_segment_fieldsReadThe same details with the labels your team gave them in Verity.
estimate_segmentReadCounts who matches a draft or a saved segment.
save_segment_draftWriteCreates the segment, or changes its name, description or definition.
list_destinationsReadShows where segments are sent and how the last run went.
request_destination_changeYou approveOpens a destination change for a person and returns a review link.
request_segment_changeYou approveOpens archiving, pausing, resuming or rebuilding a segment for a person.

Questions

Can Claude sync an audience to Meta Ads or Google Ads on its own?

No. Claude can build, size and save the segment, and it can propose the sync. The sync itself is switched on by a person in Verity, through the review link Claude hands over. That holds for every destination: Meta Ads, Google Ads, Brevo, Klaviyo and ActiveCampaign.

What happens when I change a segment that is already live?

A segment that a destination or a running journey uses is not changed directly. Claude saves the change as a pending change and gets a review link back. A person applies or discards it in Verity. Pausing, resuming, rebuilding or archiving a segment works the same way.

Does Claude see my customers’ personal data?

Segment sizes come back as counts, never as a list of people, and a count below ten reads “fewer than 10”. Details that identify a person are marked, and an agent cannot estimate or preview a segment by filtering on one person’s email address, phone number or customer id.

Which assistants does this work in?

The walkthrough uses Claude. The same tools work in ChatGPT, claude.ai, Claude Desktop, Claude Code, Codex on your own computer and Cursor.

More on how an agent runs the whole platform: Verity over MCP. More on profiles, segments and destinations: Verity as a CDP.

See it on your own customers

Book a demo and watch Claude build, size and hand over an audience on your own data.

Contact sales