# Change journal

3 LinkedIn Ads tools, each with its inputs, hosted support and CLI command.

Adwarp journals every change it makes on its own. See [Change journal and lift](https://adwarp.dev/docs/journal).

## log_ad_change

Record a change made elsewhere, or attach a hypothesis.

Record a change to an ad entity in the local change journal, so a later lift report can compare performance before vs. after it. Adwarp logs its own changes automatically. Use this for changes made elsewhere (e.g. in Campaign Manager) or to attach a hypothesis/label. Provide field+after for a field change, or note for a freeform annotation.

LinkedIn Ads. Local only. Needs the local change journal, ~/.adwarp/changelog.jsonl. Journaling is off on hosted deploys, which have a read-only filesystem.

CLI:

```
adwarp changelog add -t <type> -i <id> -f <field> --after <value> [-l <label>]
```

| Input | Type | What it is |
| --- | --- | --- |
| `entityType` (required) | campaignGroup \| campaign \| creative | campaignGroup (the 'campaign'), campaign (the 'ad group'), or creative (the 'ad') |
| `entityId` (required) | string | Numeric id of the campaign group / campaign / creative |
| `name` | string | Human name of the entity (for nicer listings) |
| `field` | string | Field that changed, e.g. dailyBudget, headline, status |
| `before` | string | Prior value, if known |
| `after` | string | New value |
| `note` | string | Freeform note (used when there is no specific field) |
| `label` | string | Hypothesis/label, e.g. 'outcome-led headline test' |
| `tags` | string[] |  |
| `at` | string | ISO 8601 time the change took effect; defaults to now |

## list_ad_changes

Recorded changes, newest first.

List recorded ad changes (newest first) from the local change journal. Filter by entity type/id or tag. Use this to see what's been changed before computing lift.

LinkedIn Ads. Local only. Needs the local change journal, ~/.adwarp/changelog.jsonl. Journaling is off on hosted deploys, which have a read-only filesystem.

CLI:

```
adwarp changelog list [-t <type>] [-i <id>] [--tag <tag>]
```

| Input | Type | What it is |
| --- | --- | --- |
| `entityType` | campaignGroup \| campaign \| creative | campaignGroup (the 'campaign'), campaign (the 'ad group'), or creative (the 'ad') |
| `entityId` | string |  |
| `tag` | string |  |
| `limit` | integer | Max rows (default 50) |

## compute_lift

Before and after performance for each recorded change.

For each recorded change to an entity, compare performance in the window before the change against the window after it (default 14 days each side). Returns before/after KPI windows and per-metric relative deltas (CTR, CPC, conversion rate, cost-per-conversion, etc.). This is a directional pre/post comparison, NOT a controlled experiment. It is confounded by seasonality, the LinkedIn learning phase after edits, and concurrent budget changes; present it as a signal and call out partial after-windows on recent changes.

LinkedIn Ads. Local only. Needs the local change journal, ~/.adwarp/changelog.jsonl. Journaling is off on hosted deploys, which have a read-only filesystem.

CLI:

```
adwarp lift <level> <id> [-w <days>]
```

| Input | Type | What it is |
| --- | --- | --- |
| `entityType` (required) | campaignGroup \| campaign \| creative | campaignGroup (the 'campaign'), campaign (the 'ad group'), or creative (the 'ad') |
| `entityId` (required) | string |  |
| `windowDays` | integer | Days on each side of a change (default 14) |

Canonical page: https://adwarp.dev/docs/tools/change-journal
Last updated: 2026-10-18
