# Measure landing-page source quality

> Compare acquisition sources by activation, retention, and paid conversion instead of only measuring clicks or signups.

## Agent adaptation contract

- Canonical human page: https://agentry.sh/workflows/landing-page-source-quality
- Execution mode: on_demand
- Immutable automation template: none
- Applies to: b2c-saas, b2b-saas, devtools-api, content-media, games
- Required example events: signup_completed, activated
- Required Agentry resources: none declared
- Do not use when:
  - Do not use until the example events are mapped to observed project signals, the current onboarding state is verified, and live event/property reads prove the required data is present.
- Ask before using:
  - Which observed events map to signup_completed, activated? Is the current onboarding state verified, and do live event/property reads show non-synthetic traffic for them?
  - Which live properties provide signup_completed.utm_source, activated.utm_source, and which stable user or account identifier joins the signals?

This is an adaptable workflow example, not an API recipe. Map event and property names to the project's saved signal map, require status: "verified" from GET /v1/projects/:project_id/onboarding, and confirm the required signals through live event/property metadata and rows. Fetch current OpenAPI or query-blueprint details before making calls. Do not infer unattended authority from this page.

## Why this matters

Marketing dashboards overvalue volume. Product teams need to know which sources create activated, retained, paying users.

## What you get

- Signup volume by source
- Activation and retention by source
- Paid conversion by source if revenue events exist
- Recommendations for where to spend or stop spending

## Walk through it

**You:**
> Which landing sources produce good users?

**Agent:**
> I'll compare acquisition source against activation and retention events.

```text
Endpoint: POST /v1/projects/:project_id/analytics/query
Exact shape: /v1/openapi.json?path=%2Fv1%2Fprojects%2F%7Bproject_id%7D%2Fanalytics%2Fquery&method=post
Custom HogQL goes in the OpenAPI-defined `query` field.
Concept fields:
  query: "SELECT properties.utm_source AS source, countIf(event = 'signup_completed') AS signups, countIf(event = 'activated') AS activated, activated / nullIf(signups, 0) AS activation_rate FROM events WHERE event IN ('signup_completed','activated') AND timestamp > now() - INTERVAL 30 DAY GROUP BY source ORDER BY signups DESC"
```

## The output

The agent returns a source-quality table and flags sources with many signups but weak activation.

## Setting it up

Persist UTM/source attribution onto signup and activation events. Anonymous pageviews are useful, but source must survive account creation.

## Variations

- *"Compare LinkedIn vs Google by paid conversion."*
- *"Only show sources with at least 50 signups."*
- *"Publish this as a marketing quality dashboard."*
