VK Ads
VK Ads reports statistics at the level of individual ads: one row per ad per day. You assemble the report yourself from dimensions and metrics: spend and clicks, post engagement events, video views, per-slide carousel statistics, viewability, and the UTM tags configured in the ad group settings.
Renta exports this report to your data warehouse and adds the attributes of the objects behind each row: campaign and ad group names, package id, and the moderation status of the ad.
Authentication
Renta uses OAuth to authenticate with VK Ads. You will be redirected to VK Ads to grant Renta limited access to your ad account.
Your credentials are encrypted in transit and at rest, and never stored in Renta's application database. You stay in control and can revoke access from your VK Ads account settings at any time.
Connect VK Ads source
- Navigate to the Connections > Catalog section in the left sidebar.
- Open the Advertising category and click the VK Ads card.

Click Log in to your VK Ads account. You will be redirected to VK Ads to grant access.

VK Ads shows the access request for the Renta application and asks which account to share. Keep your own account selected and click Разрешить доступ (Allow access). After that you are redirected back to Renta.

Finish the setup:
- Source name.
Specify a name for this data source. This is used exclusively in the Renta interface. - Access granted.
Verify that the account is connected successfully.
Click Save to finish.
If your VK Ads authorization later changes, click Re-authorize on this source. The connection refreshes in place and every pipeline built on it keeps running.

The new source appears in the Sources list with the Active status. You can now use it in pipelines.

Create a VK Ads pipeline
Once the source is connected, create a pipeline to sync your VK Ads data into your destination.
In the left sidebar, click New pipeline. On the Source step, select VK Ads under Already connected and click Next step.

Choose the VK Ads connection you created earlier and click Next step.

On the Destination step, select your destination (for example, Google BigQuery) and click Next step.

Choose the destination connection you want to load data into and click Next step.

Pipeline configuration
On the final step, choose which VK Ads data to export and how Renta loads it.
Report configuration
Point the pipeline at the ad account you need.

- Ad accounts.
Choose the VK Ads account to export data from. Each pipeline exports statistics for one account. For an agency connection, the list shows the client accounts of the agency. - Report Types.
VK Ads exposes one report type,Custom report: an ad-level statistics report that you assemble from dimensions and metrics.
Parameters
Select the VK Ads fields to include in the destination table. The parameters you choose here define the table schema.

| Name | API name | Description |
|---|---|---|
Date date | date | Date of action in the YYYY-MM-DD format. |
Campaign name text | campaign_name | Campaign name in your ad account. |
Ad group name text | ad_group_name | Ad group name in your ad account. |
Package id text | package_id | Package id in your ad account. |
Campaign id text | campaign_id | Campaign id in your ad account. |
UTM schema text | utm_schema | Return schema of utm parameters for ag group. |
Ad id text | ad_id | Ad banner id in your ad account. |
Ad name text | ad_name | Ad banner id in your ad account. |
Ad moderation status text | moderation_status | Ad banner moderation status. |
Ad group id text | ad_group_id | Ad group id in your ad account. |
UTM medium text | utm_medium | Return utm_medium value from the ad group utm-parameters scheme. |
UTM source text | utm_source | Return utm_source value from the ad group utm-parameters scheme. |
UTM campaign text | utm_campaign | Return utm_campaign value from the ad group utm-parameters scheme. |
UTM content text | utm_content | Return utm_content value from the ad group utm-parameters scheme. |
UTM term text | utm_term | Return utm_term value from the ad group utm-parameters scheme. |
| Name | API name | Description |
|---|---|---|
Shows int | base.shows | Represents the total number of times the advertisement has been displayed. |
Clicks int | base.clicks | Indicates the total number of times users have clicked on the advertisement. |
Goals int | base.goals | Refers to the number of objectives achieved, like website visits or app installations. |
Spent float | base.spent | The total amount of money spent on the advertisement. |
CPM float | base.cpm | Average cost per thousand ad impressions. |
CPC float | base.cpc | Average cost for each click on the advertisement. |
CPA float | base.cpa | Average cost for each achieved goal. |
CTR int | base.ctr | Click-through rate, calculated as (Clicks / Shows) * 100. |
CR int | base.cr | Conversion rate, calculated as (Goals / Clicks) * 100. |
Opening App int | events.opening_app | Indicates the number of times the app has been opened through the ad. |
Opening Post int | events.opening_post | Indicates the number of times the advertised post has been opened. |
Moving Into Group int | events.moving_into_group | Indicates the number of users who have moved into a group as a result of the ad. |
Clicks on External URL int | events.clicks_on_external_url | Total number of clicks on external URLs featured in the advertisement. |
Launching Video int | events.launching_video | Indicates the number of times a video was launched from the ad. |
Comments int | events.comments | Number of comments received on the advertisement. |
Joinings int | events.joinings | Number of users who joined a group or subscription service via the ad. |
Likes int | events.likes | Number of likes received on the ad. |
Shares int | events.shares | Number of times the advertisement has been shared. |
Votings int | events.votings | Total number of votes received, if the ad includes a voting feature. |
Sending Form int | events.sending_form | Number of forms submitted via the advertisement. |
Reach int | uniques.reach | The total number of unique users who have seen the ad. |
Total int | uniques.total | The total number of unique actions performed by users. |
Increment int | uniques.increment | The increase in unique actions or views since the last measurement. |
Frequency int | uniques.frequency | The average number of times a unique user has seen the ad. |
Frequency Total int | uniques.frequency_total | Total instances of ad views, counting multiple views by the same user. |
Started int | uniques_video.started | Number of unique video play starts. |
Viewed 10 Seconds int | uniques_video.viewed_10_seconds | Number of unique views that reached the 10-second mark. |
Viewed 25 Percent int | uniques_video.viewed_25_percent | Number of unique views that reached 25% of the video duration. |
Viewed 50 Percent int | uniques_video.viewed_50_percent | Number of unique views that reached 50% of the video duration. |
Viewed 75 Percent int | uniques_video.viewed_75_percent | Number of unique views that reached 75% of the video duration. |
Viewed 100 Percent int | uniques_video.viewed_100_percent | Number of unique views that reached 100% of the video duration. |
Viewed 10 Seconds Rate int | uniques_video.viewed_10_seconds_rate | Percentage of unique views reaching the 10-second mark. |
Viewed 25 Percent Rate int | uniques_video.viewed_25_percent_rate | Percentage of unique views reaching 25% of the video duration. |
Viewed 50 Percent Rate int | uniques_video.viewed_50_percent_rate | Percentage of unique views reaching 50% of the video duration. |
Viewed 75 Percent Rate int | uniques_video.viewed_75_percent_rate | Percentage of unique views reaching 75% of the video duration. |
Viewed 100 Percent Rate int | uniques_video.viewed_100_percent_rate | Percentage of unique views reaching 100% of the video duration. |
Depth of View int | uniques_video.depth_of_view | Average percentage of the video viewed by unique users. |
Started int | video.started | Number of unique video play starts. |
Paused int | video.paused | Number of times the video was paused by users. |
Resumed After Pause int | video.resumed_after_pause | Number of times the video was resumed after being paused by users. |
Fullscreen On int | video.fullscreen_on | Number of times the video was viewed in fullscreen mode. |
Fullscreen Off int | video.fullscreen_off | Number of times the video exited fullscreen mode. |
Sound Turned Off int | video.sound_turned_off | Number of times the sound was turned off during the video playback. |
Sound Turned On int | video.sound_turned_on | Number of times the sound was turned on during the video playback. |
Viewed 10 Seconds int | video.viewed_10_seconds | Number of times the video was viewed for at least 10 seconds. |
Viewed 25 Percent int | video.viewed_25_percent | Number of times 25% of the video was viewed. |
Viewed 50 Percent int | video.viewed_50_percent | Number of times 50% of the video was viewed. |
Viewed 75 Percent int | video.viewed_75_percent | Number of times 75% of the video was viewed. |
Viewed 100 Percent int | video.viewed_100_percent | Number of times the video was fully viewed. |
Depth of View int | video.depth_of_view | Average percentage of the video viewed by users. |
Slide 1 Clicks int | carousel.slide_1_clicks | Number of clicks on the first slide of the carousel ad. |
Slide 1 Shows int | carousel.slide_1_shows | Number of times the first slide of the carousel ad was displayed. |
Slide 2 Clicks int | carousel.slide_2_clicks | Number of clicks on the second slide of the carousel ad. |
Slide 2 Shows int | carousel.slide_2_shows | Number of times the second slide of the carousel ad was displayed. |
Slide 3 Clicks int | carousel.slide_3_clicks | Number of clicks on the third slide of the carousel ad. |
Slide 3 Shows int | carousel.slide_3_shows | Number of times the third slide of the carousel ad was displayed. |
Slide 4 Clicks int | carousel.slide_4_clicks | Number of clicks on the fourth slide of the carousel ad. |
Slide 4 Shows int | carousel.slide_4_shows | Number of times the fourth slide of the carousel ad was displayed. |
Slide 5 Clicks int | carousel.slide_5_clicks | Number of clicks on the fifth slide of the carousel ad. |
Slide 5 Shows int | carousel.slide_5_shows | Number of times the fifth slide of the carousel ad was displayed. |
Slide 6 Clicks int | carousel.slide_6_clicks | Number of clicks on the sixth slide of the carousel ad. |
Slide 6 Shows int | carousel.slide_6_shows | Number of times the sixth slide of the carousel ad was displayed. |
Slide 1 CTR float | carousel.slide_1_ctr | Click-through rate for the first slide of the carousel ad. |
Slide 2 CTR float | carousel.slide_2_ctr | Click-through rate for the second slide of the carousel ad. |
Slide 3 CTR float | carousel.slide_3_ctr | Click-through rate for the third slide of the carousel ad. |
Slide 4 CTR float | carousel.slide_4_ctr | Click-through rate for the fourth slide of the carousel ad. |
Slide 5 CTR float | carousel.slide_5_ctr | Click-through rate for the fifth slide of the carousel ad. |
Slide 6 CTR float | carousel.slide_6_ctr | Click-through rate for the sixth slide of the carousel ad. |
Offer Postponed int | ad_offers.offer_postponed | The number of times users postponed taking up the offer. |
Upload Receipt int | ad_offers.upload_receipt | The number of times users uploaded a receipt as part of an offer. |
Earn Offer Rewards int | ad_offers.earn_offer_rewards | The number of times users earned rewards from the offer. |
Playable Game Open int | playable.playable_game_open | Number of times the playable game within the ad was opened. |
Playable Game Close int | playable.playable_game_close | Number of times the playable game within the ad was closed. |
Playable Call to Action int | playable.playable_call_to_action | Number of times the call-to-action within the playable ad was clicked. |
TPS float | tps.tps | Total payment sent for the advertisement, usually denominated in currency. |
TPD float | tps.tpd | Total payment due for the advertisement, usually denominated in currency. |
Impressions int | moat.impressions | The total number of ad displays, whether viewed or not. |
In View int | moat.in_view | The number of times the ad was actually viewed by users within the visible area of their device. |
Never Focused int | moat.never_focused | The number of times the ad was displayed in a browser tab that was never brought to focus. |
Never Visible int | moat.never_visible | The number of times the ad was loaded but never came into the viewable area of the browser. |
Never 50% Visible int | moat.never_50_perc_visible | The number of times less than 50% of the ad was visible on the screen. |
Never 1 Sec Visible int | moat.never_1_sec_visible | The number of times the ad was visible for less than one second. |
Human Impressions int | moat.human_impressions | The number of impressions verified to be seen by real human users, as opposed to bots. |
Impressions Analyzed int | moat.impressions_analyzed | The total number of impressions that were analyzed for various metrics. |
In View Percent float | moat.in_view_percent | The percentage of ad impressions that were viewable within the visible area of the device. |
Human and Viewable Percent float | moat.human_and_viewable_perc | The percentage of ad impressions that were both viewable and verified to be seen by a human, as opposed to bots. |
Never Focused Percent float | moat.never_focused_percent | The percentage of ad impressions displayed in a browser tab that was never brought to focus. |
Never Visible Percent float | moat.never_visible_percent | The percentage of ad impressions that were loaded but never entered the viewable area of the browser. |
Never 50% Visible Percent float | moat.never_50_perc_visible_percent | The percentage of ad impressions where less than 50% of the ad was visible on the screen. |
Never 1 Sec Visible Percent float | moat.never_1_sec_visible_percent | The percentage of ad impressions that were visible for less than one second. |
In View Diff Percent float | moat.in_view_diff_percent | The percentage difference between the number of viewable impressions and some other baseline or previous measure. |
Active In View Time float | moat.active_in_view_time | The average amount of time the ad remained in the viewable area of the browser. |
Attention Quality float | moat.attention_quality | A metric assessing the level of user engagement with the ad, often based on multiple factors like time spent and interactions. |
Value float | romi.value | The predefined value assigned to an event or action related to the advertisement, used for calculating ROI. |
ROMI (Return on Marketing Investment) float | romi.romi | A performance measure used to evaluate the effectiveness of marketing investments, calculated as the revenue generated from the campaign divided by the advertising cost. |
Adv Cost Share float | romi.adv_cost_share | The proportion of total advertising costs compared to other costs or revenue streams, usually represented as a percentage. |
On the Dimensions tab, check the fields that describe the ad behind each row: Date, campaign name and id, ad group name and id, package id, ad id and name, and Ad moderation status.
On the Metrics tab, check the figures to export: impressions, clicks, spend, goals and cost metrics, post engagement events, unique user reach and frequency, video views by watch depth, per-slide carousel clicks and shows, viewability, playable ad and offer events, and ROMI.
The report includes ads and ad groups in every status. Renta requests the statistics with conversion attribution.
The five UTM dimensions (utm_source, utm_medium, utm_campaign, utm_content, utm_term) return the values configured in the UTM settings of the ad group. Renta resolves the dynamic placeholders in these values, so the destination table contains final identifiers instead of the placeholder text.
| Placeholder | Replaced with |
|---|---|
{ad_id} | The id of the ad in the row. |
{campaign_id} | The id of the campaign the ad belongs to. |
{campaign_name} | The name of the campaign the ad belongs to. |
{client_id} | The id of the exported ad account. |
The UTM schema dimension returns the raw parameter string as it is set in VK Ads.
Include the Date dimension in the report. With it, each row in the destination table is one day, the table is partitioned by the date column, and Renta loads data incrementally. Without it, Renta reloads the whole date range on every run.
Table name
Name the pipeline and the destination table.

- Integration name.
The name of the pipeline. It is used exclusively in the Renta interface. - Table name.
The destination table name. You can keep the auto-generated name or enter your own.
Date range
Set the historical period to load.

- Date start.
The first date of the extraction period. - Date end.
The last date of the extraction period. Leave it as Today to keep collecting new data on every run.
VK Ads returns statistics one day at a time and enforces request quotas, so a wide historical range takes noticeably longer to load than a few days. Renta paces its requests to stay within the quotas.
Overwrite period
The overwrite period defines how many recent days Renta reloads on every run.

On each run, Renta re-fetches the report starting from the date of the last successful run minus the overwrite period. The affected days are deleted from the destination table and inserted again, while older data stays untouched. The options range from Without overwrite data to Overwrite all data. The default is Last 1 day.
VK Ads can update statistics for recent days after they are first loaded, for example when conversions are attributed later. Set the overwrite period to several days to capture these updates.
Schedule
Choose how often the pipeline runs.

| Schedule type | Description |
|---|---|
| Manual | The pipeline runs only when triggered manually through the interface or via API. |
| Daily | The pipeline runs once a day at the specified update time. |
| Interval | The pipeline runs at specified time intervals. |
| Cron Expression | The pipeline runs on a schedule defined by a cron expression. |
For Daily schedules, set the Update time, the exact time each run starts, then click Create pipeline.

Renta also supports API triggers and integration with external orchestrators such as Apache Airflow, Dagster, and Prefect. See the full scheduling documentation for details.
The new pipeline appears in the Pipelines section under the ETL tab, where you can track its runs, progress, and the destination table name.

Sync strategy
The synchronization strategy depends on whether the report includes the Date dimension.
| Strategy | Supported report types | Description |
|---|---|---|
| Incremental | Custom report (with the Date dimension selected) | Each row is one day, and the destination table is partitioned by the date column. On every run Renta reloads the window from the last successful run minus the overwrite period to the end of the date range: those daily partitions are deleted and inserted again, and older partitions stay untouched. |
| Full reload | Custom report (without the Date dimension) | The table has no date column to partition by, so Renta requests the whole configured date range and replaces the dataset on every run. |
Changing the selected dimensions or metrics updates the table schema, so the next run after the change reloads the entire date range.
Ready to get started?
Build your data pipeline today or get a personalized demo. Start free!
Need help?
Get expert support to ensure your project succeeds. We're here to help!
Feature requests?
Help shape our product! Share your ideas for new features and integrations.