Skip to content

Introduction

Agoraform is an open-source Go CLI for Marketing as Code. You declare marketing-platform configuration in YAML, review a non-mutating plan, and apply creates and updates through provider APIs.

This documentation describes Agoraform v0.6.0. It is generated from the public repository at tag v0.6.0, not from main.

Areav0.6.0
Commandsvalidate, plan, apply, import, destroy
ProvidersMatomo, Google Ads (googleads), Meta Ads (meta)
Matomo resourcesmatomo.goal, matomo.container, Data Layer and Matomo Configuration matomo.variable, matomo.trigger, Matomo Analytics and Google Ads conversion matomo.tag
Google Ads conversiongoogleads.conversion_action, googleads.customer_conversion_goal
Google Ads SearchBudgets, campaigns, campaign goals, targeting, ad groups, keywords, and Responsive Search Ads
Meta resourcesmeta.pixel, meta.custom_conversion, meta.campaign, meta.ad_set, meta.ad_creative, meta.ad
ReferencesAddress-only $ref plus optional named { $ref, output } selectors
ImportSupported Matomo, Google Ads, and Meta resources; unique bound-output reconstruction; no mutation
DestroyExplicit teardown; reverse dependency order; no automatic prune of resources removed from the manifest
Matomo publicationDeclarative through provider configuration, visible in plan, executed during apply and destroy
StateLocal agoraform.state.json
MutationsCreate, update, and explicit destroy/remove

v0.6.0 adds the Meta Ads provider with website conversion measurement and a complete paused website conversion campaign graph. v0.5.0 closed remaining Matomo bootstrap and teardown gaps, completed Google Ads destroy/remove semantics, and proved cross-provider conversion tracking. v0.4.0 added the complete paused Google Ads Search campaign graph.

New resources:
validate -> plan -> apply -> plan
Existing resources:
import -> add/review generated config -> plan
Managed resources:
destroy

The last plan after apply reports no changes when desired configuration, local state, and remote state are unchanged. import is an alternate adoption path for existing remote objects; it does not mutate them. destroy is explicit: it acts only on resources present in the manifest and bound in state. Removing a resource from the manifest does not prune it.

  • There is no drift command and no deletion reconciliation for resources removed from configuration. apply still does not delete remote resources.
  • Meta support does not install browser Pixel code, send Conversions API events, upload media bytes, or manage Page or Instagram account provisioning.
  • Google Ads campaign support is Search-only. Performance Max, Display, Video, Shopping, App, Dynamic Search Ads, creative generation, asset uploads, optimization, and automatic spend enablement are not implemented.
  • Offline, call, app, and conversion-event upload workflows are not implemented; conversion actions remain limited to supported website (WEBPAGE) actions.
  • Customer and campaign conversion goals are created by Google Ads. Destroy reports them as provider-owned, leaves them in state, and returns non-zero after supported teardown.
  • Google Ads authentication uses a developer token plus a single-user OAuth refresh token. Service-account, multi-user, and interactive OAuth flows are not implemented.
  • One Matomo Tag Manager container is selected at a time, either by a matomo.container resource or by MATOMO_CONTAINER_ID. Mixing those modes is rejected.
  • Agoraform does not emit application events or manage Google Tag (gtag.js) in the Matomo container. Containers selected only by MATOMO_CONTAINER_ID are never deleted.
  • Matomo website/site provisioning, Google Ads billing/customer-account lifecycle, remote state, workspaces, locking, encryption, rollback, scheduled publication, and approval workflows are not implemented.

Pre-1.0 releases may introduce documented breaking changes.

  1. Install Agoraform v0.6.0
  2. Follow the quick start
  3. Read Marketing as Code