parent_integration_id pattern, the clone integration concept, how cards iterate per-property and per-campaign, and where this surfaces in the UI.
The challenge
A typical merchant who connects Google Analytics 4 grants Vortex IQ access to a single property at first connect. They run Brand A on the propertyproperties/123456789. Six weeks later they launch Brand B on a sibling property properties/987654321 under the same Google account. They want both to surface in Vortex IQ without re-doing the OAuth dance.
A typical agency who connects Google Ads grants Vortex IQ access to an MCC (My Client Center) manager account. Inside the MCC are 30 client accounts and 200 campaigns. The agency wants per-client and per-campaign reporting without 30 separate OAuth flows.
The naive solution is one integration per property or per campaign with its own OAuth grant. That works for one or two but breaks for thirty: token refresh failures multiply, the OAuth UI gets cluttered, and the merchant loses track of which integration corresponds to which property.
The Vortex IQ solution is OAuth-token sharing via the parent_integration_id pattern.
The parent_integration_id pattern
When a merchant first connects GA4 or Google Ads, Vortex IQ creates a parent integration with the OAuth token, refresh token, and account-level metadata (the merchant’s Google account email, the available property list or accessible accounts list). When the merchant adds a second property (or campaign), Vortex IQ creates a child integration that:- Stores its own property ID or campaign ID and any per-property settings.
- Does not store its own OAuth token.
- Carries a
parent_integration_idfield pointing to the parent integration. - Reads OAuth credentials at query time by following the parent reference.
The clone integration concept
In the UI, adding a second property or campaign is called cloning. The flow:- Open the connector drawer for an already-connected GA4 (or Google Ads) integration.
- Click “View Details” on the existing integration.
- Click “Add more property” (GA4) or “Add more campaign” (Google Ads).
- The drawer fetches the parent’s available property or campaign list (filtered to those not already cloned).
- Pick a property or campaign; the integration name auto-populates.
- Submit. A new child integration is created with
parent_integration_idpointing to the source.
How cards iterate per-property and per-campaign
Every card in the GA4 catalogue (100 cards on the connector) and the Google Ads catalogue (75 cards) renders once per integration. A workspace running:- Parent GA4 integration with two cloned children (three properties total)
- Parent Google Ads integration with five cloned children (six campaigns total)
- Top-level connector tab: “Google Analytics”.
- Within it, sub-tabs: “Brand A (123456789)”, “Brand B (987654321)”, “Brand C (456789012)”.
- Each sub-tab carries the full card grid scoped to that property.
Caching and quota implications
Cloned integrations share their parent’s OAuth quota with the vendor. Google Ads has API quota per developer token plus per customer account. GA4 has quota per property per day. Cloning amplifies the quota draw because each child runs its own queries. Vortex IQ’s runtime handles this with:- Per-card cache keys that include the property or campaign ID. Two property’s Total Sessions cards do not share a cache; each is keyed independently.
- Vendor-quota-aware throttling. When the workspace approaches a vendor quota ceiling, the runtime stretches refresh cadence on lower-priority cards (standard tier first, hero tier preserved).
- Per-property refresh budgets. Each property gets a fair share of the workspace’s quota allocation; one runaway property’s queries do not starve another’s.
Naming and labels
The integration name on a clone defaults to the property name or the campaign name as reported by the vendor. So a GA4 clone for property “Brand B Web” renders as “Brand B Web” in the connector tab. The merchant can rename the integration under the connector drawer’s “View Details” view; the rename is workspace-scoped and persists across re-authentications. For agencies, the rename matters: clients usually have descriptive client-side labels (Acme Corp - Production, Acme Corp - Staging) that differ from the GA4 property’s internal name. The rename surface lets the agency present the data with their preferred labels without touching the vendor.Where this surfaces in the UI
- Connector tab. GA4 and Google Ads connector tabs render sub-tabs per cloned integration.
- Connector drawer. “View Details” shows the parent and its children, with “Add more property / campaign” and “Disconnect this property” actions.
- Settings, Sources. The integrations list shows the parent and the children grouped under it. The parent_integration_id relationship is visible in the integration detail view.
- Alerts. Alerts from cloned integrations carry the property or campaign label so the merchant knows which one fired.
- Briefings. Daily morning briefings call out each cloned integration’s hero metrics separately (“Brand A Total Sessions, 14,200; Brand B Total Sessions, 9,400”).
How it relates to other modules
- Vortex Mind runs diagnostics on a per-clone basis. A revenue alert on Brand A’s GA4 produces a Brand A-scoped diagnostic; Brand B is not implicated unless the cross-channel join surfaces a relationship.
- Ask Viq routes property-or-campaign questions through the active profile (see profile dropdown). “What was the revenue on Brand A this month” resolves to the Brand A clone’s data; “all properties” resolves to the union.
- Actions scopes Kanban cards to the clone that fired the alert. An owner working on Brand A does not see Brand B noise on their board.
- Vortex Memory archives per-clone snapshots. A longitudinal query “Brand A revenue over the last six months” reads from the Brand A clone’s archive.
FAQ
Why is the OAuth token shared rather than per-clone? Google issues one OAuth token per Google account per scope set. Granting the token once and routing reads through the property ID or customer ID is the canonical pattern Google itself uses internally (the GA4 web UI does the same when a user has access to multiple properties). It minimises consent prompts and avoids the multiplied refresh-failure surface. What happens if I disconnect the parent integration? The parent disconnect cascades to the clones because they depend on the parent’s token. Vortex IQ surfaces a confirmation banner (“disconnecting this integration will also disconnect 3 cloned properties”) and the merchant has to confirm. The clones are paused (their cards render stale) but their configuration is preserved; reconnecting the parent reactivates the clones automatically. Can I disconnect just one clone? Yes. A clone can be disconnected independently without affecting the parent or other clones. The clone’s configuration is preserved (in case the merchant wants to reconnect it later) but its cards stop refreshing. Disconnect is reversible; the merchant re-clones from the parent’s available property or campaign list. How do I see which property a card is showing? Each card’s title shows the integration name (which defaults to the property or campaign name). The connector sub-tab also shows the active property in the breadcrumb. Hovering the card timestamp reveals the property ID for unambiguous identification. Can I have a parent in one workspace and clones in another? No. The parent and its clones are workspace-scoped. An agency with multiple workspaces (one per client) connects GA4 separately in each workspace if the agency holds the credential. If the client holds the credential, each workspace runs its own integration owned by the client. What about manager accounts in Google Ads? Google Ads MCC accounts are handled the same way as direct accounts. The OAuth token is granted at the MCC level; cloned integrations are created per client account or per campaign within a client account. The campaign-id-scoped clones are the most granular surface; the agency can also keep the client-account-scoped clone for the rolled-up view of that client. Does this work for GA4 dimensional cuts (e.g. by audience or by traffic source)? Today it works at the property level. Dimensional cuts within a property are filters on cards within the property’s tab, not new clones. A merchant who wants per-traffic-source cards as separate tiles uses the dashboard’s filter controls; they do not clone a property to achieve it. How does cloning interact with quota? Each clone consumes its share of the parent’s vendor API quota. Vortex IQ’s runtime watches the quota and throttles lower-priority cards on the most quota-hungry clones first. For workspaces approaching quota limits, the Settings, Data Refresh view shows where the budget is going.Cross-links
- Concept: the KPI model
- Concept: data freshness
- Concept: alert system
- Concept: time windows
- Concept: hero, cross-channel, tiers
- Concept: multi-currency
- Platform: Settings, Sources, Multi-property Clones
- Platform: Settings, Data Refresh
- Module: Vortex Mind, how diagnostics work
- Module: Ask Viq
- Module: Actions
- Module: Vortex Memory