---
name: "analytics_set_goals"
area: "analytics"
title: "Set a site's goals"
price: "free"
method: "POST"
url: "https://api.conecto.chat/v1/tools/analytics_set_goals"
mcp_server: "https://api.conecto.chat/mcp/analytics"
auth: "Authorization: Bearer <conecto_sk_ key>"
docs_url: "https://conecto.chat/tools/analytics/analytics_set_goals"
---

# Set a site's goals (`analytics_set_goals`)

Sets the conversions a site counts: pages reached or events, replacing its goals; with notify, the agent hears of each one as it happens.

The conversions to count, replacing the site's goals: a page reached ({"name": "Order placed", "page": "/checkout/done"}) or a custom event, optionally with props ({"name": "Pro signup", "event": "Signup", "props": {"plan": "pro"}}). analytics_stats then shows each goal's visitors, conversions, conversion rate and revenue (from conecto("Purchase", {...}, {revenue: 49.9, currency: "USD"})). An empty list removes them.

Price: Free. A call that fails costs nothing.

## Use it when

The business wants to know how many visitors did something that matters: ordered, signed up, booked.

## Say this to your agent

> Count it as a conversion whenever someone finishes checkout or signs up for the newsletter.

## Inputs

| Name | Type | Required | Description | Allowed values | Default |
|---|---|---|---|---|---|
| `site` | string | yes | The site's domain (e.g. halversoncycle.example) or its site_id. 4 to 253 characters. |  |  |
| `goals` | array of objects | yes | Up to 20 items. |  |  |
| `goals[].name` | string | no | Up to 60 characters. |  |  |
| `goals[].page` | string | no | A page reached, like /thanks or /order/*/done. Up to 500 characters. |  |  |
| `goals[].event` | string | no | A custom event, like Signup, or one analytics_define_events made. Up to 60 characters. |  |  |
| `goals[].props` | object | no | Only events with these props, like {"plan": "pro"}. |  |  |
| `goals[].notify` | boolean | no | Send analytics.goal_completed the moment a visitor reaches it, with where they came from and what they saw. |  |  |

## Example

Written for Halverson Cycle & Repair, a bike shop with a repair workshop in Portland, Oregon.

MCP: call `analytics_set_goals` on the MCP server `https://api.conecto.chat/mcp/analytics` with these arguments:

```json
{
  "site": "halversoncycle.example",
  "goals": [
    {
      "name": "Order placed",
      "page": "/checkout/done"
    },
    {
      "name": "Newsletter",
      "event": "Subscribe"
    }
  ]
}
```

REST:

```bash
curl https://api.conecto.chat/v1/tools/analytics_set_goals \
  -H "Authorization: Bearer $CONECTO_KEY" \
  -H "Content-Type: application/json" \
  -d '{"site": "halversoncycle.example", "goals": [{"name": "Order placed", "page": "/checkout/done"}, {"name": "Newsletter", "event": "Subscribe"}]}'
```

## Response

```json
{
  "call_id": "5f0c8a2e-3b7d-4c1e-9a64-2d8e1f7b0c93",
  "tool": "analytics_set_goals",
  "status": "succeeded",
  "replayed": false,
  "cost_usd": "$0.00",
  "balance_usd": "$19.75",
  "result": {
    "site": {
      "site_id": "2c0bddc7-d636-4cee-8341-90a8c41a1efd",
      "domain": "halversoncycle.example",
      "name": "Halverson Cycle & Repair",
      "time_zone": "America/Los_Angeles",
      "snippet": "<script defer src=\"https://cncto.co/a.js\" data-site=\"2c0bddc7-d636-4cee-8341-90a8c41a1efd\"></script>",
      "events_this_month": 13,
      "clicks_this_month": 0,
      "allowance_per_month": 100000,
      "extra_blocks": 0,
      "monthly_usd": "$3.00",
      "goals": [
        {
          "name": "Order placed",
          "page": "/checkout/done"
        },
        {
          "name": "Newsletter",
          "event": "Subscribe"
        }
      ],
      "events": [],
      "spike_alert_visitors": null,
      "weekly_summary": false,
      "track_errors": false,
      "keep_sources": true,
      "created_at": "2026-10-14T08:00:00+00:00"
    }
  }
}
```

`result`: The site, with the goals it now counts.

## Errors

| Code | Status | When | Fix |
|---|---|---|---|
| `not_found` | 404 | No site the business counts has that domain or site_id. | Call analytics_list_sites and use a domain from it. |
| `invalid_input` | 400 | A goal has no name, two goals share a name, or a goal is not exactly one page or one event. | Give each goal its own name and either a page like /checkout/done or an event like Subscribe. |

The refusals every tool can give (401 key, 402 balance, 429 limits) are on the errors page: https://conecto.chat/docs/errors.md

## Related

- [analytics_add_site](https://conecto.chat/tools/analytics/analytics_add_site.md): Starts counting visits to a website, without cookies, and returns the snippet for its pages. $3.00 a call.
- [analytics_install](https://conecto.chat/tools/analytics/analytics_install.md): Step-by-step instructions to put the counting script on a site: any html, Shopify, WordPress, Webflow or Google Tag Manager. Free up to 1,000,000 reads a month.
- [analytics_stats](https://conecto.chat/tools/analytics/analytics_stats.md): A site's visitors, pages, sources, countries, devices, events, goals and speed for a period, against the period before. Free up to 1,000,000 reads a month.
- [analytics_breakdown](https://conecto.chat/tools/analytics/analytics_breakdown.md): One event or goal by a prop or by where its visits came from, with conversions, conversion rate and revenue. Free up to 1,000,000 reads a month.
- [analytics_realtime](https://conecto.chat/tools/analytics/analytics_realtime.md): Visitors in the last 5 minutes, and the pages people looked at in the last 30. Free up to 1,000,000 reads a month.
- [analytics_define_events](https://conecto.chat/tools/analytics/analytics_define_events.md): Defines events from what the script already sees (clicks, pages, scrolling, time on a page, props), with nobody editing the site. Free.
- [analytics_track](https://conecto.chat/tools/analytics/analytics_track.md): Records events that happen away from the site, like orders, deals won or renewals, tied to the visit that led to them when it can be found. Free.
- [analytics_funnel](https://conecto.chat/tools/analytics/analytics_funnel.md): How many visitors did each step of a path in order, and how many dropped out at each one. Free up to 1,000,000 reads a month.
- [analytics_paths](https://conecto.chat/tools/analytics/analytics_paths.md): Where visits went after a page and where they came from, or the commonest journeys through the site. Free up to 1,000,000 reads a month.
- [analytics_heatmap](https://conecto.chat/tools/analytics/analytics_heatmap.md): A page's heatmap: the most clicked elements, rage and dead clicks, scroll depth and time on page, with a link that draws it. Free up to 1,000,000 reads a month.
- [analytics_problems](https://conecto.chat/tools/analytics/analytics_problems.md): Pages that answered an error to visitors, JavaScript errors, and where people rage-click or click with nothing happening. Free up to 1,000,000 reads a month.
- [analytics_web_vitals](https://conecto.chat/tools/analytics/analytics_web_vitals.md): How fast the site's pages are for real visitors: Core Web Vitals at the 75th percentile, rated the way Google rates them. Free up to 1,000,000 reads a month.
- [analytics_view_link](https://conecto.chat/tools/analytics/analytics_view_link.md): A one-time link to a page that shows a site's stats to a person. Free.
- [analytics_update_site](https://conecto.chat/tools/analytics/analytics_update_site.md): Changes a site's name, time zone, traffic alert, weekly summary, JavaScript errors and whether where leads came from is kept with them. Free.
- [analytics_list_sites](https://conecto.chat/tools/analytics/analytics_list_sites.md): Every site this account counts, with this month's events and its snippet. Free up to 1,000,000 reads a month.
- [analytics_add_events](https://conecto.chat/tools/analytics/analytics_add_events.md): Raises a site's monthly event allowance by blocks of a million events. $5.00 per block of a million events a month.
- [analytics_remove_site](https://conecto.chat/tools/analytics/analytics_remove_site.md): Stops counting a site, ends its rent and deletes its stats for good. Free.
