Deduplicating Joins Across Citation, Referral, and CRM Data
Website owners comparing citation reports with referrals and customer relationship management (CRM) outcomes need to keep the three record types separate. A…
Website owners who measure video visibility in Google Search need to separate traffic from two different places. Search Console’s Video search type counts results shown in Google’s Videos tab. The Videos search appearance identifies video results within Web search or Discover. Each filter measures a different Google surface, so keep the results separate. Google does not provide one total for all video-related visibility.
Search Console reports clicks, impressions, click-through rate (CTR), and average position. BigQuery, Google’s data warehouse, lets you query exported Search Console performance data at the property or URL level. Choose the filter that matches your question, and compare data only when it covers the same scope and uses the same level of aggregation.
Start by deciding which Google surface you want to measure:
| Question | Search Console filter | BigQuery filter |
|---|---|---|
| How much traffic came from the Google Videos tab? | Search type: Video | search_type is video |
| How often did a video appear in Web search? | Search type: Web and Search appearance: Videos | In the URL table, search_type is web and is_video = TRUE |
| How many watch pages have indexed videos, and what indexing issues were reported? | Video indexing report | This is not a Performance-report clicks or impressions measure |
Google uses the Video search type for traffic from results in the Videos tab. The Videos search appearance covers videos shown in Web results or Discover, including video carousels. Report Video-tab traffic and Videos-appearance traffic separately. Google provides no general rule for deduplicating overlap into one total. The Performance report documentation describes the search-type filters, and Google’s dimension reference explains search appearances and URL attribution.
The Video indexing report answers a different question. It reports on watch pages with indexed videos and explains why other videos were not indexed. Use this report to check indexing status, not to compare clicks or impressions with the Performance report.
For Google Videos-tab traffic, open Search Console’s Search results Performance report, set the date range, and select Search type: Video. Use Pages, Countries, Devices, or Dates to break down the segment. To measure video appearances within ordinary Web search, select Search type: Web and add Search appearance: Videos.
The report’s CTR is clicks divided by impressions. Average position summarizes the topmost result for the grouping being reported. A page-level table row and a property-wide chart can therefore show different average positions. Keep the same grouping when comparing periods.
When you filter for the Videos appearance, Search Console assigns clicks to a URL. This does not show that a person clicked the video itself. They might have clicked another link to the same URL in the results. Read the measure as traffic assigned to URLs that appeared with the video feature, not as clicks on a video player.
A direct report export suits a small, focused investigation, but it does not include the full set of less common results. Search Console limits exported report rows to 1,000 representative rows, while report totals include data beyond those rows. Do not sum the exported rows to recreate the full report totals. See Google’s guidance on exporting report data.
Search Console’s bulk export provides a table named searchdata_site_impression with data grouped by property, and a table named searchdata_url_impression with data grouped by URL. Use the property table for totals by search type. Use the URL table for landing-page data or the is_video field, which marks the Videos search appearance. The export also includes an ExportLog table with export status and dates.
For video analysis, the useful fields include data_date, site_url, search_type, clicks, impressions, and device. The URL table also has url and is_video. The property table has sum_top_position; the URL table has sum_position. Both position fields store the sum of top positions, counting the first position as zero. Divide the sum by impressions, then add one to get the average position.
Bulk export runs daily and does not backfill data from before setup. Google says the first export can take up to 48 hours after successful configuration. For earlier data, use Search Console reports or the Search Analytics API. The bulk export table reference documents the tables and fields. Google’s reference lists search-type values in lowercase, but its examples also use uppercase. The queries below lowercase values so either form works.
This query returns daily property totals for the Videos tab:
SELECT
data_date,
SUM(impressions) AS impressions,
SUM(clicks) AS clicks,
SAFE_DIVIDE(SUM(clicks), SUM(impressions)) AS ctr,
SAFE_DIVIDE(SUM(sum_top_position), SUM(impressions)) + 1 AS avg_position
FROM <code>PROJECT_ID.searchconsole.searchdata_site_impression
WHERE data_date BETWEEN @start_date AND @end_date
AND LOWER(search_type) = 'video'
GROUP BY data_date
ORDER BY data_date;
This query returns daily URL-level totals for video appearances in Web search:
SELECT
data_date,
SUM(impressions) AS impressions,
SUM(clicks) AS clicks,
SAFE_DIVIDE(SUM(clicks), SUM(impressions)) AS ctr,
SAFE_DIVIDE(SUM(sum_position), SUM(impressions)) + 1 AS avg_position
FROM <code>PROJECT_ID.searchconsole.searchdata_url_impression
WHERE data_date BETWEEN @start_date AND @end_date
AND LOWER(search_type) = 'web'
AND is_video = TRUE
GROUP BY data_date
ORDER BY data_date;
Replace PROJECT_ID with the Google Cloud project that contains the export tables, and set @start_date and @end_date to the dates you want to query. To report by landing page, add url to the second query’s SELECT and GROUP BY. To measure Discover video appearances, query the URL table with search_type set to discover and report that scope separately.
Google notes that BigQuery export rows are not guaranteed to be consolidated. Sum clicks, impressions, and position totals before calculating CTR or average position. The query guidelines include more examples.
Compare clicks and impressions over time only when the property, search type, table’s level of detail, date basis, and filters match. Calculate CTR as total clicks divided by total impressions. Calculate average position as the sum of position totals divided by total impressions, plus one. Do not average row-level CTRs or positions: rows with different impression counts would receive equal weight even though they represent different amounts of search activity.
Keep the property and URL tables separate. They show performance at different levels of detail. Adding their totals would count the same search activity twice, once at each level. Likewise, report Videos-tab traffic separately from Web or Discover video appearances. The two segments answer different questions, and their totals are not a documented combined measure.
Search Console excludes anonymized queries from query details. When you calculate totals in BigQuery, keep rows where the query value is empty. Exclude those rows only when you analyze named queries. The bulk export overview also documents this query-detail exclusion. Search Console performance data also measures search visibility and interactions, not video playback starts or watch time.
Give Vroni a GitHub issue, bug report, spec, or rough idea. It reads the repo, plans the change, writes code, runs checks, and works toward a review-ready pull request.
Take a look at vroni.com