Skip to main content

Nextdoor

Extractor

Nextdoor is a neighbourhood social network. Nextdoor Ads Manager (NAME) is its self-serve advertising platform, where businesses run campaigns targeted at specific neighbourhoods, postal codes or radii, and measure them with the Nextdoor conversion pixel. Advertisers connect this data source to bring their campaign structure and performance data into their own reporting.

Some NAME actions remain UI-only and can't be extracted: initial sign-up, payment methods, adding or archiving custom audiences, and archiving media assets.

At a glance

PropertyValue
AuthenticationAPI key / token
Sync typeMixed: campaigns, ad groups, ads, creatives and custom audiences sync incrementally; everything else is full table
StreamsFixed list
Custom queriesSupported (custom performance reports)

What you can sync

  • Account and user info: who owns the token, and which advertisers they can reach
  • Campaign structure: campaigns, ad groups, ads and creatives
  • Custom audiences referenced by your ad groups
  • Performance data: aggregate ad stats, or a custom report you define yourself

Prerequisites

  • Access Token: the only credential needed. Generated in Nextdoor Ads Manager, and sent as a bearer token on every request.

Setup

In Nextdoor Ads Manager

  1. Sign in to Nextdoor Ads Manager and generate an Ads API access token.

In Meltano Cloud

  1. Enter your Access Token.
  2. Optionally set Advertiser IDs to restrict extraction to specific advertiser accounts and their child campaigns, ad groups and ads (leave empty to sync every advertiser the token can reach).
  3. Optionally set Start Date and End Date to bound the ad_stats and performance_report streams (both default to today). Every other stream replicates on its own bookmark or in full, and ignores these two settings.
  4. Optionally define an Ad Performance Report to build a custom report (see Advanced configuration below).

Available streams

StreamReplicationReplication key
usersFull tableN/A
profilesFull tableN/A
advertisersFull tableN/A
campaignsIncrementalupdated_at
ad_groupsIncrementalupdated_at
adsIncrementalupdated_at
creativesIncrementalupdated_at
reportsFull tableN/A
ad_statsFull tableN/A
performance_reportFull tableN/A
custom_audiencesIncrementalupdated_at

users

The NAME user that owns the access token, and which advertisers they can reach.

FieldTypeDescription
idstringThe user's ads ID
namestringUser's display name
emailstringUser's email address
email_confirmedbooleanWhether the user has confirmed their email
advertisers_with_accessarrayAdvertisers this user can access, with their role on each

profiles

The advertising profile behind the token, including its billing profile and whether it is an agency.

FieldTypeDescription
idstringThe profile's ads ID
namestringProfile name
associated_user_idsarrayUsers attached to this profile
payment_profile_idstringBilling profile backing this advertising profile
is_ad_agencybooleanWhether the profile represents an agency

advertisers

Advertiser accounts the token can access.

FieldTypeDescription
advertiser_idstringAdvertiser ID
rolestringThe token holder's role on this advertiser, e.g. CLIENT_ADMIN

campaigns

Campaigns, with objective, status and flight dates. Replicates incrementally on updated_at.

FieldTypeDescription
idstringCampaign ID
advertiser_idstringID of the advertiser that owns the campaign
namestringCampaign name
statusstringEffective delivery status, e.g. ACTIVE, PAUSED, ARCHIVED
user_statusstringStatus explicitly set by the advertiser
objectivestringCampaign objective, e.g. CONVERSION, TRAFFIC
sub_objectivestringObjective refinement, e.g. WEBSITE_CONVERSIONS
special_ad_categorybooleanWhether the campaign is in a regulated category (housing, credit, employment)
created_atdatetimeWhen the campaign was created
updated_atdatetimeWhen the campaign was last modified (replication key)
start_timedatetimeScheduled start of delivery
end_timedatetimeScheduled end of delivery; absent if open-ended

ad_groups

Ad groups, carrying the bid, budget, placements, frequency caps and all targeting. Replicates incrementally on updated_at.

FieldTypeDescription
idstringAd group ID
advertiser_idstringOwning advertiser ID
campaign_idstringParent campaign ID
namestringAd group name
statusstringEffective delivery status
user_statusstringStatus explicitly set by the advertiser
placementsarrayWhere ads may serve, e.g. FEED, FSF, RHR
audience_network_is_onbooleanWhether off-Nextdoor audience network delivery is enabled
bidobjectBid settings for the ad group
budgetobjectBudget settings for the ad group
start_timedatetimeScheduled start of delivery
end_timedatetimeScheduled end of delivery; absent if open-ended
frequency_capsarrayLimits on how often one neighbour sees these ads
targetingobjectGeographic, audience, interest and daypart targeting
custom_audience_idsarrayCustom audience IDs referenced by this ad group
created_atdatetimeWhen it was created
updated_atdatetimeWhen it was last modified (replication key)

ads

Individual ads, linking an ad group to the creative it renders. Replicates incrementally on updated_at.

FieldTypeDescription
idstringAd ID
advertiser_idstringOwning advertiser ID
adgroup_idstringParent ad group ID
creative_idstringCreative rendered by this ad; joins to the creatives stream
namestringAd name
statusstringEffective delivery status, e.g. ACTIVE, INACTIVE, ARCHIVED, INELIGIBLE
user_statusstringStatus explicitly set by the advertiser
created_atdatetimeWhen the ad was created
updated_atdatetimeWhen the ad was last modified (replication key)

creatives

Creative assets: headline, body, call to action, image and logo URLs, and click and impression trackers. Replicates incrementally on updated_at.

FieldTypeDescription
idstringCreative ID
advertiser_idstringOwning advertiser ID
namestringCreative name
statusstringReview status, e.g. APPROVED
placementstringPlacement this creative targets
creative_typestringCreative format, e.g. IMAGE_NATIVE_V3
text_overlaysarrayText rendered over the image
advertiser_namestringAdvertiser name shown to neighbours
headlinestringHeadline text
body_textstringBody copy
offer_textstringOffer text, if any
pricestringDisplayed price, if any
ctastringCall to action, e.g. "Learn more"
canvas_image_urlstringMain creative image
logo_image_urlstringAdvertiser logo
clickthrough_urlstringDestination URL
impression_tracking_urlsarrayThird-party impression pixels
click_tracking_urlsarrayThird-party click trackers
created_atdatetimeWhen it was created
updated_atdatetimeWhen it was last modified (replication key)

reports

Saved and scheduled report definitions with their CSV download URLs. Definitions only. This stream carries no metrics.

FieldTypeDescription
idstringReport ID
advertiser_idstringOwning advertiser ID
namestringReport name
download_urlstringPresigned URL for the report CSV. Short-lived and credential-bearing: treat as a secret

ad_stats

Aggregate performance per ad over the configured window. One row per ad, not a daily time series.

FieldTypeDescription
ad_idstringAd these metrics are for
advertiser_idstringOwning advertiser ID
start_timedatetimeStart of the reporting window
end_timedatetimeEnd of the reporting window, inclusive
billable_spendstringBillable spend, currency-prefixed, e.g. "GBP 12.50"
cpcstringCost per click, currency-prefixed
cpmstringCost per thousand impressions, currency-prefixed
cost_per_resultstringCost per result, currency-prefixed
impressionsintegerImpressions served
clicksintegerClicks received
ctrnumberClick-through rate as a percentage value, e.g. 0.557 means 0.557%
resultnumberResults against the campaign objective
total_conversionsintegerAll conversions, summing the breakdown below
purchase_conversionsintegerPurchase conversions
lead_conversionsintegerLead conversions
sign_up_conversionsintegerSign-up conversions
add_to_cart_conversionsintegerAdd-to-cart conversions
initiate_checkout_conversionsintegerCheckout-initiated conversions
search_conversionsintegerSearch conversions
view_content_conversionsintegerView-content conversions
add_to_wishlist_conversionsintegerAdd-to-wishlist conversions
subscribe_conversionsintegerSubscribe conversions
other_conversionsintegerConversions not in the categories above

performance_report

A custom performance report, built entirely from the Ad Performance Report setting. Its fields are not fixed: the schema is generated from your config, with one column per requested dimension and metric, plus advertiser_id, report_id and date. See Advanced configuration below. Leave the setting unset to skip this stream and use ad_stats instead.

custom_audiences

Custom audiences referenced by ad groups. Replicates incrementally on updated_at.

FieldTypeDescription
idstringCustom audience ID
advertiser_idstringOwning advertiser ID
adgroup_idstringThe ad group this audience was discovered from
namestringAudience name
descriptionstringAdvertiser's own notes
audience_typestringHow the audience was built, e.g. emails
created_atdatetimeWhen it was created
updated_atdatetimeWhen it was last modified (replication key)

Advanced configuration

  • Custom performance reports: define an Ad Performance Report to build your own daily/weekly/monthly report from the reporting API:

    report:
    metrics: [IMPRESSIONS, CLICKS, CTR, SPEND, BILLABLE_SPEND, CPM, CPC, CONVERSIONS]
    dimension_granularity: [AD] # CAMPAIGN, AD_GROUP, AD, PLACEMENT
    time_granularity: [DAY] # DAY, WEEK, MONTH
    name: tap-nextdoor performance report # report name in NAME
    stream_name: performance_report # rename the stream if you like
    recipient_emails: [] # every sync emails these
    campaign_ids: [] # optional filters
    adgroup_ids: []
    ad_ids: []

    Every key except the three granularity/metric lists is optional, and all enum values are validated up front. A typo fails immediately with the supported values listed.

    Caveats: unlike every other stream, this one writes: each sync creates a report object in the advertiser's account (these accumulate, and are listed in the reports stream), and emails everyone in recipient_emails unless you leave it empty. Report rows carry no IDs (only Campaign Name, Ad Group Name and Ad Name), so they join to the campaigns, ad_groups and ads streams by name only; renaming an entity in NAME breaks that join. If you'd rather avoid the side effects, leave the setting unset and use ad_stats instead (side-effect free, but one aggregate row per ad rather than a daily series, at a cost of one request per ad).

Data notes

  • Money is always currency-prefixed ("GBP 3.35") on bids, budgets and all stats spend fields, so these are typed as strings rather than parsed, and no currency information is lost.
  • CTR is a percentage value in both performance streams: 1.05 means 1.05%.
  • Campaign and ad group timestamps arrive with a bracketed zone ID (2025-08-26T00:01:34+01:00[Europe/London]), which isn't valid against the standard date-time format. The tap strips the zone ID and keeps the UTC offset, so the instant is unchanged.

Settings

SettingTypeDescription
access_tokenstringNextdoor Ads Manager API access token.
advertiser_idsarrayRestrict extraction to specific advertiser accounts and their child campaigns, ad groups and ads. Leave empty to sync every advertiser the token can reach.
start_datedateStart of the window bounding ad_stats and performance_report. Defaults to today.
end_datedateEnd of the window bounding ad_stats and performance_report. Defaults to today.
reportobjectAd Performance Report definition, building the performance_report stream. See Advanced configuration.

Need help?

If a stream or field you need isn't listed here or the connector doesn't work as expected, file it through the usual Meltano support channel.