VidWorth

Documentation

VidWorth documentation

VidWorth Video Attribution Console ties YouTube views to tracked clicks, form leads, booked calls and revenue — per video. This page covers setup end to end. If something is missing or wrong, tell us.

What it does

YouTube never reports description-link clicks. You can see that a video got 40,000 views, but not that it produced eleven clicks, three leads and one closed deal — so the video that actually pays for the channel is invisible in YouTube Studio.

VidWorth closes that loop by owning the middle of it:

  • Views come from the YouTube Data and Analytics APIs for channels you connect.
  • Clicks are ours, because the link in the description is a VidWorth short link that redirects to your funnel and logs the click on the way through.
  • Leads, calls and payments arrive from the tools you already use — GoHighLevel, Calendly, Cal.com, Typeform, Tally, ClickFunnels — carrying the UTM tags the redirect attached.
  • The join happens on utm_content, which holds the YouTube video id. That is what turns "a booking" into "a booking from that video".

One domain, on purpose

The dashboard, the short links, the OAuth callbacks and the webhook endpoints all live on www.vidworth.co. There is no app. or go. subdomain to allow-list. Clients who want their own branded link host can point one at us instead — see Tracked links.

Quick start

Roughly fifteen minutes, most of it waiting for the first YouTube sync. Everything below is expanded in its own section.

  1. Create an account at https://www.vidworth.co/signup — Google or email and password. You get your own isolated workspace; nobody else can see it until you invite them.
  2. Connect a YouTube channel. One OAuth consent per channel. We read videos and view stats, and only write to a video when you explicitly ask us to.
  3. Create a tracked link pointing at the funnel, booking page or offer the channel sends people to.
  4. Place it on a video — into the description, the pinned first comment, or both. Every edit is backed up for one-click undo.
  5. Connect where conversions happen — your GoHighLevel sub-account, Calendly, or a form tool — so bookings and opt-ins flow back in automatically.
  6. Read the dashboard. Views, unique clicks, CTR, leads, booked calls and booking rate, per video and per channel.

Connect a YouTube channel

Settings → Channels → Connect channel starts a Google sign-in. Pick the Google account that manages the channel — for a Brand Account, that is an account listed as an owner or manager of the channel, not merely a subscriber.

What we ask for and why

PermissionWhat we do with it
Read your channel and videosList uploads, titles, thumbnails and view counts
Read YouTube AnalyticsPer-day view figures, so CTR is measured against the right window
Manage your YouTube accountTwo explicit actions only: writing a tracked link into a description, and posting a comment or reply when you write one

Description edits are non-destructive

When we update a description we read the video's full snippet, change only the description field, and write the whole snippet back — so the title, tags and category survive. YouTube's API replaces the entire snippet on an update, and a partial write is how other tools silently wipe a video's tags. We also store the previous description, so Undo restores it exactly.

Disconnecting

Disconnect a channel from Settings at any time. Historical clicks and bookings stay so past reports remain readable; syncing stops immediately. You can also revoke access from your Google account's security page — we treat a revoked token as a disconnect on the next sync rather than retrying forever.

Placing links on videos

From a video's page, or in bulk from the Videos list, you can:

  • Add to description — inserts the tracked link, keeping the rest of the description intact.
  • Post as first comment — posts as the channel, ready to pin.
  • Undo — restores the description exactly as it was before our edit.

Bulk placement runs across a selection of videos and reports per-video success or failure rather than stopping at the first error. Each video gets its own link, so a click can always be traced to the video that produced it.

Placement is never automatic without you

Nothing is written to YouTube until you press the button. Scheduled automations exist for new uploads, but they are opt-in per channel and shown on the channel's settings.

GoHighLevel

Connecting your HighLevel sub-account sends contacts, form submissions and appointments into VidWorth as they happen, attributed to the video that produced them. We only ever read from HighLevel — nothing in your CRM is created, edited or deleted by this app.

Installing is free

The VidWorth app on the GoHighLevel Marketplace is free to install — installing it is not a purchase and never triggers a charge. What is paid for is the VidWorth subscription that gives you the dashboard to read the data in, and that one subscription includes every integration we offer at no extra cost. See the terms for the full wording.

Install it

  1. In HighLevel, open Settings → Integrations (or the App Marketplace) and install VidWorth.
  2. Choose the sub-account (location) you want to connect, and approve the read-only permissions on the consent screen.
  3. You land back in VidWorth with the location connected. If you started from VidWorth instead, use Integrations → GoHighLevel → Connect and pick the same sub-account.
  4. Pick the channel this sub-account belongs to. One HighLevel location can feed several channels — each gets its own copy of every conversion.

What we read

PermissionWhy
Locations (read-only)Confirm which sub-account was connected and label it
Contacts (read-only)Receive new contacts and form submissions as leads
Forms (read-only)Name the form a submission came from
Calendar events (read-only)Receive appointments as booked calls, including cancellations

Read-only, and revocable

There is no write permission in the list, so the app cannot change your contacts, calendars or workflows even if it wanted to. Uninstalling the app from HighLevel immediately stops delivery; your existing VidWorth history stays intact, and reinstalling reconnects in place.

Making the attribution work

HighLevel needs to receive the UTM tags for a lead to land on the right video. Two things make that happen:

  • Send traffic through a tracked link so the destination page is loaded with utm_content and tid in the URL.
  • Let HighLevel capture them. HighLevel records UTM parameters on the contact automatically as its attribution source. For the strongest match, add hidden fields named utm_content and tid to your form or survey and let HighLevel pre-fill them from the query string.

A conversion that arrives with no usable tags is not thrown away or guessed at — it shows up in an honest bucket like YouTube, unattributed or Direct / unknown, described under Reading the numbers.

Wiring it by hand instead

If you would rather not install the app, a HighLevel Workflow → Webhook action works too. The Integrations page shows a per-channel URL of the form:

https://www.vidworth.co/api/webhooks/ghl/<channelId>

POST the contact or appointment payload there. This path is for manual wiring only — the installed app uses a single app-wide endpoint and routes each delivery by the location id inside the payload.

Other integrations

Every integration is connected per channel, from Integrations. OAuth connections register their own webhook automatically; the rest give you a URL to paste.

ToolConnect byWhat arrives
CalendlyOAuthBooked and cancelled invitees, with intake answers
Cal.comOAuthBookings and cancellations, signature-verified
TypeformOAuthForm responses as leads
TallyWebhook URLForm submissions as leads
ClickFunnels 2.0Webhook URLOpt-ins and orders
Anything elseGeneric webhook URLOpt-ins, bookings or payments you POST to us

Signatures matter

Every vendor endpoint verifies that vendor's signature. The generic endpoint cannot — it authenticates nothing beyond the unguessable URL — so treat its URL as a secret and prefer a vendor-specific integration whenever one exists.

Duplicate protection

Deliveries are idempotent per conversion. If a vendor retries, or you run both the tracking script and a webhook for the same tool, the conversion is recorded once. The de-duplication key is the conversion, never the person — a lead's second booking is a second booking, not a redelivery of the first.

Site tracking script

The optional tracking script stitches a visitor's journey together across pages and captures form submissions on sites we have no integration for. Copy it from Integrations → Tracking script and paste it into your site's <head>. It is scoped to one channel:

<script defer src="https://www.vidworth.co/api/script/<channelId>"></script>

It stores the click id from the URL so a form submitted three pages later still carries it, and posts submissions to your channel's tracking endpoint. It sets no advertising cookies and follows no one across other sites.

Reading the numbers

The metrics

MetricDefinition
ViewsYouTube's own figure for the video, over the selected range
Unique clicksDistinct non-bot visitors who followed the tracked link
CTRUnique clicks ÷ views
LeadsForm opt-ins and contacts received from connected tools
Booked callsAppointments received, cancellations excluded
Booking rateBooked calls ÷ unique clicks

Attribution buckets

Every conversion lands in exactly one bucket, and all buckets are always shown. Hiding the unattributed ones would make the attributed numbers look better and the totals wrong:

BucketWhen
Videoutm_content matches a video we know — full credit to that video
YouTube, unattributedCame from YouTube (utm_source=youtube) but no video id survived
Other sourceCarried UTM tags from somewhere that isn't YouTube
Direct / unknownArrived with no tags at all — typed the URL, or the tags were stripped

A big unattributed bucket is a fixable problem

It almost always means tags are being dropped between the click and the form: a redirect that discards the query string, a funnel page that links onward without carrying parameters, or a form that doesn't capture hidden fields. Open a conversion in Leads to see exactly what arrived with it.

Leads, bookings & revenue

Leads is the person-level view: every contact we have seen for a channel, the video that produced them, the answers they gave, and every touch in between. Two conversions that share an email or a click id are recognised as the same person rather than counted as two.

Bookings lists calls with their attribution bucket and their intake answers. Transactions records payments received from connected checkout tools, so a video's row can carry revenue and not just call volume.

Every list exports to CSV from the button in its header, honouring the filters and date range you have applied.

Syncing & automation

Conversions arrive in real time over webhooks. YouTube data is pulled on a schedule, because YouTube's APIs are quota-limited and its analytics figures settle over hours rather than seconds:

JobFrequencyWhat it does
New uploadsEvery 15 minutesNotices videos published since the last check
ViewsHourlyRefreshes view counts for recent videos
Full video syncNightlyReconciles the whole catalogue
Daily statsNightlyPulls per-day analytics for accurate ranges

Sync now on any channel forces an immediate refresh. View counts you see in YouTube Studio can lead ours by up to a few hours — YouTube's public figure and its analytics figure disagree with each other too, and we report the analytics one because it is the one that can be sliced by date.

AI assistant & MCP

The console has a built-in assistant that answers questions about your own data — "which video produced the most booked calls last month?" — and can prepare actions like a bulk placement for you to approve. It never writes to YouTube without an explicit approval step.

VidWorth also exposes a remote MCP endpoint, so an external client such as Claude can query your workspace directly. Settings shows the endpoint URL for your deployment along with the connection steps. It authenticates with OAuth and is scoped to your workspace — the same data you can see in the dashboard, and nothing else.

Data & security

  • Tokens are encrypted at rest with AES-256-GCM, and are never logged or displayed.
  • No raw IP addresses. An IP is one-way hashed with a rotating daily salt to estimate unique clicks, then discarded.
  • Emails are stored as a one-way hash, so a lead can be recognised across tools without us keeping a readable address list.
  • Workspace isolation. Data is visible only to members of the workspace that owns the channel. Sign-in is open; access is governed by membership and invites.
  • Webhook signatures are verified for every vendor that signs its deliveries.
  • Google data is handled under the Google API Services User Data Policy, including the Limited Use requirements. It is never sold and never used for advertising.

Full detail is in the Privacy Policy and Terms of Service. Deletion requests go to support.

Troubleshooting

Clicks are showing but leads are not

The conversion tool isn't reaching us, or it is reaching us and being bucketed as unattributed. Check the integration's status on the Integrations page — it records the last delivery it received and any error. If deliveries are arriving, the tags are being lost between the click and the form; see the tip under Reading the numbers.

Everything lands in "Direct / unknown"

Traffic is reaching your funnel without going through a tracked link, or a redirect on your side is dropping the query string. Open the tracked link yourself and confirm the parameters survive all the way to the page with the form on it.

A channel stopped syncing

Google access was revoked, or the account no longer manages the channel. Reconnect it from Settings — history is preserved.

The connect button for a tool is missing

That integration has no credentials configured on this deployment, so it is hidden rather than shown broken. Ask us to enable it.

A booking was counted twice

Usually two paths for the same tool — the tracking script and a webhook, or two workflows pointing at the same endpoint. Tell us which conversion and we'll trace the delivery.

Get help

Open the support page and tell us what you expected and what happened instead. Your request is confirmed by email the moment you send it, with a reference to quote. If it involves a specific lead, booking or video, include its link.