# HubSpot–LinkedIn integration completed

This is a fictional worked example. It contains no live account result. Fill planned fields first; add observed values only after a dated native read-back for the exact portal, ad account, Page and form.

## Decision rules

- `DRAFT_READY`: planned scope is complete; native paths may remain Unknown.
- `LAUNCH_HOLD`: required authorization, scope or native receipt is missing.
- `REPAIR_REQUIRED`: a proved failure, contradiction, malformed field or positive unresolved count needs repair.
- `VERIFIED`: complete same-scope native receipts and an evidenced zero unresolved count at the declared cutoff. This label does not authorize a test or live change.
- A blank field means the operator has not identified it. `UNKNOWN` means it is identified but not read back. `KNOWN 0` is an actual dated zero; it is never inferred from a blank dashboard.

## Scope and planned work

| Field | Value |
|---|---|
| scope.organization | Northstar Analytics (fictional) |
| scope.portal_id | HS-PORTAL-NS-14 |
| scope.linkedin_user_ref | li-user-ns-17 |
| scope.ad_account_id | LI-ACCT-NS-4821 |
| scope.page_id | LI-PAGE-NS-88 |
| scope.form_id | LI-FORM-NS-Q4 |
| scope.campaign_id | LI-CAMP-NS-40 |
| scope.ad_id | LI-AD-NS-401 |
| scope.ad_format | Single Image |
| plan.connection_owner | Northstar HubSpot admin (fictional) |
| plan.lead_sync_owner | Northstar Page and form owner (fictional) |
| plan.routing_owner | Northstar CRM workflow owner (fictional) |
| plan.destination_url | https://northstar.example/demo |
| plan.planned_route | Assign two distinct contacts to enterprise SDR queue after form event |
| plan.planned_report_view | All form submissions |
| plan.test_authorized_by | Northstar form owner (fictional) |
| plan.test_authorized_at | 2026-10-08T13:55:00Z |
| plan.test_authorization_ref | EX-AUTH-01 |
| cutoff.start | 2026-10-08T14:00:00Z |
| cutoff.end | 2026-10-08T14:15:00Z |
| cutoff.timezone | UTC |
| cutoff.cohort | Northstar Analytics fictional authorized three-submission test |
| cutoff.ad_account_id | LI-ACCT-NS-4821 |
| cutoff.page_id | LI-PAGE-NS-88 |
| cutoff.form_id | LI-FORM-NS-Q4 |

## Native path receipts

| Step | State | Observed value | Evidence | Time | Owner |
|---|---|---|---|---|---|
| hubspot_ads_permission | PASS | Publish | EX-NATIVE-01 | 2026-10-08T14:10:00Z | HubSpot portal admin |
| linkedin_account_role | PASS | Account Manager | EX-NATIVE-02 | 2026-10-08T14:10:00Z | LinkedIn ad-account owner |
| account_status | PASS | active | EX-NATIVE-03 | 2026-10-08T14:10:00Z | LinkedIn ad-account owner |
| app_authorization | PASS | current | EX-NATIVE-04 | 2026-10-08T14:10:00Z | LinkedIn app owner |
| connection | PASS | LI-ACCT-NS-4821 | EX-NATIVE-05 | 2026-10-08T14:10:00Z | HubSpot Ads owner |
| reporting | PASS | LI-CAMP-NS-40 / LI-AD-NS-401 / 2026-10-08 | EX-NATIVE-06 | 2026-10-08T14:10:00Z | HubSpot Ads owner |
| auto_tracking | PASS | on | EX-NATIVE-07 | 2026-10-08T14:10:00Z | HubSpot Ads owner |
| final_url | PASS | https://northstar.example/demo | EX-NATIVE-08 | 2026-10-08T14:10:00Z | LinkedIn campaign owner |
| redirect | PASS | none | EX-NATIVE-09 | 2026-10-08T14:10:00Z | Web destination owner |
| tracking_parameters | PASS | utm_source=linkedin; utm_medium=paid; hsa_acc present | EX-NATIVE-10 | 2026-10-08T14:10:00Z | HubSpot Ads owner |
| page_role | PASS | Lead Gen Forms Manager | EX-NATIVE-11 | 2026-10-08T14:10:00Z | LinkedIn Page admin |
| lead_sync | PASS | LI-ACCT-NS-4821 / LI-PAGE-NS-88 / LI-FORM-NS-Q4 selected; no Leads-tab error | EX-NATIVE-12 | 2026-10-08T14:10:00Z | HubSpot lead-sync owner |
| submission | PASS | LI-SUB-NS-001, LI-SUB-NS-002, LI-SUB-NS-003 | EX-NATIVE-13 | 2026-10-08T14:10:00Z | LinkedIn form owner |
| contact | PASS | HS-CONTACT-NS-11 (pre-existing), HS-CONTACT-NS-12 (new) | EX-NATIVE-14 | 2026-10-08T14:10:00Z | HubSpot CRM owner |
| ad_event | PASS | three in-cohort ad events | EX-NATIVE-15 | 2026-10-08T14:10:00Z | HubSpot CRM owner |
| form_event | PASS | three in-cohort lead-ad form events | EX-NATIVE-16 | 2026-10-08T14:10:00Z | HubSpot CRM owner |
| routing | PASS | HS-CONTACT-NS-11 and HS-CONTACT-NS-12 assigned to enterprise SDR queue | EX-NATIVE-17 | 2026-10-08T14:10:00Z | HubSpot workflow owner |

## One-cutoff populations

Submitted IDs partition into resolved, documented rejected and unresolved. Synced IDs may overlap unresolved while a contact or event receipt is missing. Contacts and routed contacts count distinct people; ad and form events count distinct in-cohort events. Duplicate submissions remain in the submitted population. Do not add these unlike units together.

| Population | State | Value | Evidence | Definition |
|---|---|---:|---|---|
| submitted | KNOWN | 3 | EX-COUNT-01 | Distinct LinkedIn submission IDs for this form and cutoff. |
| synced | KNOWN | 3 | EX-COUNT-02 | Submission IDs with HubSpot lead-sync acceptance; not people. |
| contacts | KNOWN | 2 | EX-COUNT-03 | Distinct HubSpot contact IDs linked to in-cohort submissions, including pre-existing contacts. |
| ad_events | KNOWN | 3 | EX-COUNT-04 | Distinct in-cohort LinkedIn ad events on linked contacts. |
| form_events | KNOWN | 3 | EX-COUNT-05 | Distinct in-cohort lead-ad form submission events on linked contacts. |
| routed_contacts | KNOWN | 2 | EX-COUNT-06 | Distinct contacts with a dated workflow or owner-assignment receipt. |
| duplicate_submissions | KNOWN | 1 | EX-COUNT-07 | Later in-cohort submissions mapping to an already counted contact; retain their submission IDs. |
| resolved_submissions | KNOWN | 3 | EX-COUNT-08 | Submitted IDs with complete required HubSpot receipts. |
| rejected_submissions | KNOWN | 0 | EX-COUNT-09 | Submitted IDs with documented rejection, not a silent missing contact. |
| unresolved_submissions | KNOWN | 0 | EX-COUNT-10 | Submitted IDs not yet resolved or documented as rejected; positive blocks verification. |

## Report diagnosis

Existing before form: YES; view: All form submissions; absent from report: NO.

## Run the local checker

```sh
python3 hubspot-linkedin-checker.py hubspot-linkedin-integration-completed.json --markdown
node hubspot-linkedin-checker.mjs hubspot-linkedin-integration-completed.json
```

Keep test-contact personal data, tokens and credentials in the approved systems, not this handoff. The JSON file is the machine-readable source; the table above is its readable companion.
