blowhorn analytics

blowhorn analytics: activity, history, import-exports, operations.

The blowhorn analytics commands. Each one's --help prints the same text.

Command What it does
analytics activity Print one activity's result, read from the store.
analytics history Print the follower history the collectors have already recorded, as one dated series read from the store: every LinkedIn page and every profile's X trend, whichever machine collected them.
analytics import-exports Read the LinkedIn page content exports already on disk and record each activity's reception figures in the store.
analytics operations Aggregate the run ledger, read from the store, into operations per profile, per platform, per command, per day or per host.

blowhorn analytics activity

Print one activity's result, read from the store: for each profile and platform it is addressed to, whether it went out (when, the live link, which computer and browser profile ran it, and on a failure the error and the fix), how it was received where reception is collected (LinkedIn page activities, from the page content exports, with the date the figures were read and a comparison with the page's typical activity), and the follower change around it, labelled derived. Anything not collected says so, with a reason, never as a zero. A computer with no store prints a short explanation and exits 3.

output
blowhorn analytics activity [OPTIONS] row
Argument Required Description
row yes Activity number, as 'content list' prints it
Flag Type Default Description
--json boolean false Emit machine-readable JSON output
--platform string all Platform scope for 'blowhorn analytics'. One of: bluesky, linkedin, x, all ('all' means every platform listed here)
--pace string Accepted by 'blowhorn analytics activity' because --pace is a global flag, but this command does no paced work -- it opens no browser and sleeps between nothing -- so the value changes nothing about how it runs and appears only in the Pace column of the -v summary. Resolved as CLI flag, then BLOWHORN_PACE, then defaults.pace in .blowhorn.yaml (normal when none is set); an unrecognized value is rejected before anything runs

Also takes the shared flags: --config, --log-dir, --profile, --exclude, --headless, --chrome-launch, --headed, --dry-run, --verbose.

Examples:

terminal
blowhorn analytics activity 164 --json
blowhorn analytics activity 164 --profile lee

Output: json with --json, text otherwise.

blowhorn analytics history

Print the follower history the collectors have already recorded, as one dated series read from the store: every LinkedIn page and every profile's X trend, whichever machine collected them. Tolerates the N/A cells the collectors write, and derives the 30-day net, growth rate and (LinkedIn pages only) unfollowed figures, each labelled derived in the output; X profiles carry a net change and no unfollowed count, because X measures only the total. A store that cannot be reached exits 3.

output
blowhorn analytics history [OPTIONS]
Flag Type Default Description
--since string How far back to read: a number with d, w, m or y (30d, 12m, 1y), or 'all' (default: 12m)
--subject string One page or profile name (all by default)
--json boolean false Emit machine-readable JSON output
--platform string Platform scope for 'blowhorn analytics'. One of: bluesky, linkedin, x, all ('all' means every platform listed here)
--pace string Accepted by 'blowhorn analytics history' because --pace is a global flag, but this command does no paced work -- it opens no browser and sleeps between nothing -- so the value changes nothing about how it runs and appears only in the Pace column of the -v summary. Resolved as CLI flag, then BLOWHORN_PACE, then defaults.pace in .blowhorn.yaml (normal when none is set); an unrecognized value is rejected before anything runs

Also takes the shared flags: --config, --log-dir, --profile, --exclude, --headless, --chrome-launch, --headed, --dry-run, --verbose.

Examples:

terminal
blowhorn analytics history --json --since 12m
blowhorn analytics history --json --subject Layer5 --since all
blowhorn analytics history --subject lee --since 90d

Output: json with --json, text otherwise.

blowhorn analytics import-exports

Read the LinkedIn page content exports already on disk and record each activity's reception figures in the store: impressions, views, clicks, click-through rate, likes, comments, reposts, follows and engagement rate from each export's All posts sheet, dated by the export. Each activity is matched to its content row by its link; activities made outside Blowhorn are kept and marked unmatched. Prints rows read, matched and stored per file. Safe to run again: a reading lands once per activity and export date. --dry-run reads and matches without writing.

output
blowhorn analytics import-exports [OPTIONS] [paths...]
Argument Required Description
paths ... no Export files to read (default: every content export in the analytics folder)
Flag Type Default Description
--json boolean false Emit machine-readable JSON output
--platform string all Platform scope for 'blowhorn analytics'. One of: bluesky, linkedin, x, all ('all' means every platform listed here)
--pace string Accepted by 'blowhorn analytics import-exports' because --pace is a global flag, but this command does no paced work -- it opens no browser and sleeps between nothing -- so the value changes nothing about how it runs and appears only in the Pace column of the -v summary. Resolved as CLI flag, then BLOWHORN_PACE, then defaults.pace in .blowhorn.yaml (normal when none is set); an unrecognized value is rejected before anything runs

Also takes the shared flags: --config, --log-dir, --profile, --exclude, --headless, --chrome-launch, --headed, --dry-run, --verbose.

Examples:

terminal
blowhorn analytics import-exports
blowhorn analytics import-exports data/analytics/layer5_content_20260719_033126.xls --dry-run --json

Output: json with --json, text otherwise.

blowhorn analytics operations

Aggregate the run ledger, read from the store, into operations per profile, per platform, per command, per day or per host: how many runs each action made, what they confirmed, skipped and failed, and which profiles and platforms were active. Reads the ledger only - a dry run is counted apart and never as an operation, and records exist from the first run after this command shipped, so a window older than that reports zero rather than guessing. Per host is the per-machine history now that several machines share one store. A store that cannot be reached exits 3.

output
blowhorn analytics operations [OPTIONS]
Flag Type Default Description
--since string How far back to read: a number with d, w, m or y (30d, 12m, 1y), or 'all' (default: 30d)
--group-by string Aggregate per profile, platform, command, day or host -- host is the machine that ran it (default: profile)
--kind string Which ledger records to aggregate: run (action runs, the default) or tick (scheduler passes)
--json boolean false Emit machine-readable JSON output
--platform string Platform scope for 'blowhorn analytics'. One of: bluesky, linkedin, x, all ('all' means every platform listed here)
--pace string Accepted by 'blowhorn analytics operations' because --pace is a global flag, but this command does no paced work -- it opens no browser and sleeps between nothing -- so the value changes nothing about how it runs and appears only in the Pace column of the -v summary. Resolved as CLI flag, then BLOWHORN_PACE, then defaults.pace in .blowhorn.yaml (normal when none is set); an unrecognized value is rejected before anything runs

Also takes the shared flags: --config, --log-dir, --profile, --exclude, --headless, --chrome-launch, --headed, --dry-run, --verbose.

Examples:

terminal
blowhorn analytics operations --json --since 30d --group-by profile
blowhorn analytics operations --json --since 7d --group-by platform
blowhorn analytics operations --kind tick --group-by day --since 14d
blowhorn analytics operations --group-by host --since 30d

Output: json with --json, text otherwise.

Last modified October 18, 2026