@koda-sl/baker-cli 0.15.0 → 0.18.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +469 -5
- package/dist/cli.js +5 -1
- package/dist/cli.js.map +1 -1
- package/dist/client.d.ts +3 -1
- package/dist/client.d.ts.map +1 -1
- package/dist/client.js +4 -3
- package/dist/client.js.map +1 -1
- package/dist/commands/ads/google/accounts.d.ts.map +1 -1
- package/dist/commands/ads/google/accounts.js +7 -4
- package/dist/commands/ads/google/accounts.js.map +1 -1
- package/dist/commands/ads/google/index.d.ts.map +1 -1
- package/dist/commands/ads/google/index.js +5 -1
- package/dist/commands/ads/google/index.js.map +1 -1
- package/dist/commands/ads/google/library/index.d.ts +2 -0
- package/dist/commands/ads/google/library/index.d.ts.map +1 -0
- package/dist/commands/ads/google/library/index.js +271 -0
- package/dist/commands/ads/google/library/index.js.map +1 -0
- package/dist/commands/ads/output.d.ts +1 -0
- package/dist/commands/ads/output.d.ts.map +1 -1
- package/dist/commands/ads/output.js +18 -15
- package/dist/commands/ads/output.js.map +1 -1
- package/dist/commands/ga4/audit.d.ts +13 -0
- package/dist/commands/ga4/audit.d.ts.map +1 -0
- package/dist/commands/ga4/audit.js +67 -0
- package/dist/commands/ga4/audit.js.map +1 -0
- package/dist/commands/ga4/index.d.ts +2 -0
- package/dist/commands/ga4/index.d.ts.map +1 -0
- package/dist/commands/ga4/index.js +26 -0
- package/dist/commands/ga4/index.js.map +1 -0
- package/dist/commands/ga4/presets.d.ts +8 -0
- package/dist/commands/ga4/presets.d.ts.map +1 -0
- package/dist/commands/ga4/presets.js +33 -0
- package/dist/commands/ga4/presets.js.map +1 -0
- package/dist/commands/ga4/properties.d.ts +14 -0
- package/dist/commands/ga4/properties.d.ts.map +1 -0
- package/dist/commands/ga4/properties.js +61 -0
- package/dist/commands/ga4/properties.js.map +1 -0
- package/dist/commands/ga4/query.d.ts +69 -0
- package/dist/commands/ga4/query.d.ts.map +1 -0
- package/dist/commands/ga4/query.js +184 -0
- package/dist/commands/ga4/query.js.map +1 -0
- package/dist/commands/ga4/resolve.d.ts +2 -0
- package/dist/commands/ga4/resolve.d.ts.map +1 -0
- package/dist/commands/ga4/resolve.js +57 -0
- package/dist/commands/ga4/resolve.js.map +1 -0
- package/dist/commands/gsc/index.d.ts +2 -0
- package/dist/commands/gsc/index.d.ts.map +1 -0
- package/dist/commands/gsc/index.js +26 -0
- package/dist/commands/gsc/index.js.map +1 -0
- package/dist/commands/gsc/presets.d.ts +9 -0
- package/dist/commands/gsc/presets.d.ts.map +1 -0
- package/dist/commands/gsc/presets.js +34 -0
- package/dist/commands/gsc/presets.js.map +1 -0
- package/dist/commands/gsc/query.d.ts +79 -0
- package/dist/commands/gsc/query.d.ts.map +1 -0
- package/dist/commands/gsc/query.js +196 -0
- package/dist/commands/gsc/query.js.map +1 -0
- package/dist/commands/gsc/resolve.d.ts +2 -0
- package/dist/commands/gsc/resolve.d.ts.map +1 -0
- package/dist/commands/gsc/resolve.js +57 -0
- package/dist/commands/gsc/resolve.js.map +1 -0
- package/dist/commands/gsc/sitemaps.d.ts +19 -0
- package/dist/commands/gsc/sitemaps.d.ts.map +1 -0
- package/dist/commands/gsc/sitemaps.js +65 -0
- package/dist/commands/gsc/sitemaps.js.map +1 -0
- package/dist/commands/gsc/sites.d.ts +14 -0
- package/dist/commands/gsc/sites.d.ts.map +1 -0
- package/dist/commands/gsc/sites.js +61 -0
- package/dist/commands/gsc/sites.js.map +1 -0
- package/dist/commands/research/index.d.ts.map +1 -1
- package/dist/commands/research/index.js +7 -5
- package/dist/commands/research/index.js.map +1 -1
- package/dist/commands/research/web.d.ts +19 -0
- package/dist/commands/research/web.d.ts.map +1 -0
- package/dist/commands/research/web.js +112 -0
- package/dist/commands/research/web.js.map +1 -0
- package/dist/env.d.ts +2 -0
- package/dist/env.d.ts.map +1 -1
- package/dist/env.js +2 -0
- package/dist/env.js.map +1 -1
- package/dist/error-handler.d.ts +8 -0
- package/dist/error-handler.d.ts.map +1 -0
- package/dist/error-handler.js +37 -0
- package/dist/error-handler.js.map +1 -0
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -20,11 +20,19 @@ export BAKER_API_URL="https://your-baker-instance.convex.site"
|
|
|
20
20
|
|
|
21
21
|
# Optional: default customer ID for Google Ads commands
|
|
22
22
|
export BAKER_GOOGLE_ADS_CUSTOMER_ID="1234567890"
|
|
23
|
+
|
|
24
|
+
# Optional: default GA4 property ID
|
|
25
|
+
export BAKER_GA4_PROPERTY_ID="properties/123456789"
|
|
26
|
+
|
|
27
|
+
# Optional: default GSC site URL
|
|
28
|
+
export BAKER_GSC_SITE_URL="https://example.com/"
|
|
23
29
|
```
|
|
24
30
|
|
|
25
31
|
- `BAKER_API_KEY` must start with `bk_`
|
|
26
32
|
- `BAKER_API_URL` is your Convex site URL
|
|
27
33
|
- `BAKER_GOOGLE_ADS_CUSTOMER_ID` — default Google Ads customer ID (10 digits). Used when `--customer-id` is not passed. If neither is set and the account has exactly one Google Ads customer, it is auto-selected.
|
|
34
|
+
- `BAKER_GA4_PROPERTY_ID` — default GA4 property ID. Used when `--property-id` is not passed. If neither is set and exactly one property is connected, it is auto-selected.
|
|
35
|
+
- `BAKER_GSC_SITE_URL` — default GSC site URL. Used when `--site-url` is not passed. If neither is set and exactly one site is verified, it is auto-selected.
|
|
28
36
|
|
|
29
37
|
## Output Format
|
|
30
38
|
|
|
@@ -375,6 +383,260 @@ baker ads google keywords metrics --customer-id 1234567890 --keywords "running s
|
|
|
375
383
|
|
|
376
384
|
---
|
|
377
385
|
|
|
386
|
+
### Google Ads Library (`baker ads google library`)
|
|
387
|
+
|
|
388
|
+
Manage and search the Google Ads Transparency Center. Track competitor advertisers, browse their ad creatives, and discover who's bidding on keywords.
|
|
389
|
+
|
|
390
|
+
**Typical workflow:** `search-advertiser` → `track` → `search-ads`
|
|
391
|
+
|
|
392
|
+
---
|
|
393
|
+
|
|
394
|
+
### `baker ads google library search-advertiser "query"`
|
|
395
|
+
|
|
396
|
+
Search for an advertiser on the Google Ads Transparency Center.
|
|
397
|
+
|
|
398
|
+
```bash
|
|
399
|
+
baker ads google library search-advertiser "Nike"
|
|
400
|
+
baker ads google library search-advertiser "example.com"
|
|
401
|
+
```
|
|
402
|
+
|
|
403
|
+
**Response:**
|
|
404
|
+
|
|
405
|
+
```json
|
|
406
|
+
{
|
|
407
|
+
"ok": true,
|
|
408
|
+
"data": {
|
|
409
|
+
"results": [
|
|
410
|
+
{ "advertiserId": "AR12345678901234567", "name": "Nike, Inc.", "region": "US", "format": "TEXT_IMAGE_VIDEO" }
|
|
411
|
+
]
|
|
412
|
+
}
|
|
413
|
+
}
|
|
414
|
+
```
|
|
415
|
+
|
|
416
|
+
**Flags:**
|
|
417
|
+
|
|
418
|
+
| Flag | Description |
|
|
419
|
+
|------------|--------------------------------|
|
|
420
|
+
| `--output` | Format: `json` \| `csv` \| `md` |
|
|
421
|
+
|
|
422
|
+
---
|
|
423
|
+
|
|
424
|
+
### `baker ads google library track <id> <name>`
|
|
425
|
+
|
|
426
|
+
Track a new Google advertiser and wait for the initial ad sync to complete. Polls every 5 seconds with a 10-minute timeout. Progress is written to stderr.
|
|
427
|
+
|
|
428
|
+
```bash
|
|
429
|
+
baker ads google library track AR12345678901234567 "Nike, Inc."
|
|
430
|
+
baker ads google library track AR12345678901234567 "Nike, Inc." --json
|
|
431
|
+
```
|
|
432
|
+
|
|
433
|
+
**Response (with `--json`):**
|
|
434
|
+
|
|
435
|
+
```json
|
|
436
|
+
{
|
|
437
|
+
"ok": true,
|
|
438
|
+
"data": {
|
|
439
|
+
"advertiserId": "ar_abc123",
|
|
440
|
+
"accountId": "acc_def456",
|
|
441
|
+
"totalAdCount": 342,
|
|
442
|
+
"activeAdCount": 89
|
|
443
|
+
}
|
|
444
|
+
}
|
|
445
|
+
```
|
|
446
|
+
|
|
447
|
+
**Flags:**
|
|
448
|
+
|
|
449
|
+
| Flag | Description |
|
|
450
|
+
|----------|----------------------|
|
|
451
|
+
| `--json` | Output in JSON format |
|
|
452
|
+
|
|
453
|
+
---
|
|
454
|
+
|
|
455
|
+
### `baker ads google library list-advertisers`
|
|
456
|
+
|
|
457
|
+
List all tracked Google advertisers and their accounts.
|
|
458
|
+
|
|
459
|
+
```bash
|
|
460
|
+
baker ads google library list-advertisers
|
|
461
|
+
baker ads google library list-advertisers --output md
|
|
462
|
+
```
|
|
463
|
+
|
|
464
|
+
**Flags:**
|
|
465
|
+
|
|
466
|
+
| Flag | Description |
|
|
467
|
+
|------------|--------------------------------|
|
|
468
|
+
| `--output` | Format: `json` \| `csv` \| `md` |
|
|
469
|
+
|
|
470
|
+
---
|
|
471
|
+
|
|
472
|
+
### `baker ads google library sync-status <accountId>`
|
|
473
|
+
|
|
474
|
+
Check the sync status and ad counts of a tracked account.
|
|
475
|
+
|
|
476
|
+
```bash
|
|
477
|
+
baker ads google library sync-status acc_def456
|
|
478
|
+
```
|
|
479
|
+
|
|
480
|
+
**Response:**
|
|
481
|
+
|
|
482
|
+
```json
|
|
483
|
+
{
|
|
484
|
+
"ok": true,
|
|
485
|
+
"data": {
|
|
486
|
+
"syncStatus": null,
|
|
487
|
+
"totalAdCount": 342,
|
|
488
|
+
"activeAdCount": 89
|
|
489
|
+
}
|
|
490
|
+
}
|
|
491
|
+
```
|
|
492
|
+
|
|
493
|
+
`syncStatus` is `null` when idle, `"syncing"` during a sync, or `"error"` if the last sync failed.
|
|
494
|
+
|
|
495
|
+
---
|
|
496
|
+
|
|
497
|
+
### `baker ads google library search-ads <accountId>`
|
|
498
|
+
|
|
499
|
+
Search and filter ads for a tracked account. Supports pagination.
|
|
500
|
+
|
|
501
|
+
```bash
|
|
502
|
+
baker ads google library search-ads acc_def456
|
|
503
|
+
baker ads google library search-ads acc_def456 --search "summer sale" --isActive --mediaType image
|
|
504
|
+
baker ads google library search-ads acc_def456 --sort newest --limit 50
|
|
505
|
+
baker ads google library search-ads acc_def456 --cursor "eyJwYWdl..."
|
|
506
|
+
```
|
|
507
|
+
|
|
508
|
+
**Response:**
|
|
509
|
+
|
|
510
|
+
```json
|
|
511
|
+
{
|
|
512
|
+
"ok": true,
|
|
513
|
+
"data": {
|
|
514
|
+
"page": [
|
|
515
|
+
{
|
|
516
|
+
"_id": "abc123",
|
|
517
|
+
"platform": "google",
|
|
518
|
+
"externalId": "CR_1234567890",
|
|
519
|
+
"isActive": true,
|
|
520
|
+
"mediaType": "image",
|
|
521
|
+
"headline": "Summer Sale — 50% Off Everything",
|
|
522
|
+
"description": "Shop our biggest sale of the year. Free shipping on all orders.",
|
|
523
|
+
"destinationUrl": "https://example.com/summer-sale",
|
|
524
|
+
"bodyText": "Summer Sale — 50% Off Everything",
|
|
525
|
+
"pageName": "Example Store",
|
|
526
|
+
"impressionsMin": 100000,
|
|
527
|
+
"impressionsMax": 200000,
|
|
528
|
+
"startDate": "2025-06-01",
|
|
529
|
+
"endDate": "2025-06-30",
|
|
530
|
+
"firstSeenAt": 1717200000000,
|
|
531
|
+
"lastSeenAt": 1719792000000,
|
|
532
|
+
"publisherPlatforms": ["GOOGLE_ADS"],
|
|
533
|
+
"regionCodes": ["US", "GB"],
|
|
534
|
+
"variations": [
|
|
535
|
+
{
|
|
536
|
+
"headline": "Summer Sale — 50% Off",
|
|
537
|
+
"description": "Shop our biggest sale of the year.",
|
|
538
|
+
"destinationUrl": "https://example.com/summer-sale",
|
|
539
|
+
"imageUrl": "https://...",
|
|
540
|
+
"visibleUrl": "example.com"
|
|
541
|
+
}
|
|
542
|
+
],
|
|
543
|
+
"regions": [
|
|
544
|
+
{ "code": "US", "name": "United States" }
|
|
545
|
+
],
|
|
546
|
+
"analysisStatus": "completed",
|
|
547
|
+
"aiAnalysis": {
|
|
548
|
+
"aiSummary": "Promotional display ad for a seasonal sale with urgency-driven CTA",
|
|
549
|
+
"hookAngle": "Discount/Price",
|
|
550
|
+
"offerType": "Percentage Discount",
|
|
551
|
+
"ctaStrategy": "Shop Now",
|
|
552
|
+
"funnelStage": "Bottom",
|
|
553
|
+
"targetAudience": "Price-sensitive shoppers",
|
|
554
|
+
"adFormat": "responsive_display",
|
|
555
|
+
"tags": ["sale", "discount", "ecommerce"],
|
|
556
|
+
"trustSignals": ["Free shipping"],
|
|
557
|
+
"keyMessages": ["50% off", "Free shipping"],
|
|
558
|
+
"competitiveAngle": "Price leadership",
|
|
559
|
+
"dominantColors": ["#FF5733", "#FFFFFF"],
|
|
560
|
+
"analyzedAt": 1719792000000
|
|
561
|
+
}
|
|
562
|
+
}
|
|
563
|
+
],
|
|
564
|
+
"continueCursor": "eyJwYWdl...",
|
|
565
|
+
"isDone": false
|
|
566
|
+
}
|
|
567
|
+
}
|
|
568
|
+
```
|
|
569
|
+
|
|
570
|
+
**Key response fields:**
|
|
571
|
+
|
|
572
|
+
| Field | Description |
|
|
573
|
+
|-------|-------------|
|
|
574
|
+
| `headline`, `description` | Top-level ad copy (first variation) |
|
|
575
|
+
| `variations[]` | All ad variations with copy, images, videos, and URLs |
|
|
576
|
+
| `regions[]` | Geographic targeting regions |
|
|
577
|
+
| `impressionsMin/Max` | Estimated impression range (Google Ads Transparency data) |
|
|
578
|
+
| `publisherPlatforms` | Where the ad ran (GOOGLE_ADS, YOUTUBE, etc.) |
|
|
579
|
+
| `analysisStatus` | AI analysis state: `pending`, `processing`, `completed`, `failed` |
|
|
580
|
+
| `aiAnalysis` | AI-generated creative analysis (only present when `analysisStatus` is `completed`) |
|
|
581
|
+
| `aiAnalysis.aiSummary` | One-line AI summary of the ad |
|
|
582
|
+
| `aiAnalysis.hookAngle` | Creative hook (Discount, Fear, Social Proof, etc.) |
|
|
583
|
+
| `aiAnalysis.funnelStage` | Funnel position: Top, Middle, Bottom |
|
|
584
|
+
| `aiAnalysis.tags` | AI-generated tags for filtering |
|
|
585
|
+
|
|
586
|
+
**Flags:**
|
|
587
|
+
|
|
588
|
+
| Flag | Description |
|
|
589
|
+
|---------------|------------------------------------------------|
|
|
590
|
+
| `--search` | Search term for ad text |
|
|
591
|
+
| `--isActive` | Filter by active ads only |
|
|
592
|
+
| `--mediaType` | Filter by media type: `image`, `video`, `text` |
|
|
593
|
+
| `--sort` | Sort: `newest` or `oldest` |
|
|
594
|
+
| `--limit` | Max results per page (default 20, max 100) |
|
|
595
|
+
| `--cursor` | Pagination cursor from previous response |
|
|
596
|
+
| `--output` | Format: `json` \| `csv` \| `md` |
|
|
597
|
+
|
|
598
|
+
---
|
|
599
|
+
|
|
600
|
+
### `baker ads google library sync <accountId>`
|
|
601
|
+
|
|
602
|
+
Trigger an immediate re-sync for a tracked account. Polls every 5 seconds until complete (10-minute timeout). Progress is written to stderr.
|
|
603
|
+
|
|
604
|
+
```bash
|
|
605
|
+
baker ads google library sync acc_def456
|
|
606
|
+
```
|
|
607
|
+
|
|
608
|
+
**Response:**
|
|
609
|
+
|
|
610
|
+
```json
|
|
611
|
+
{
|
|
612
|
+
"ok": true,
|
|
613
|
+
"data": {
|
|
614
|
+
"totalAdCount": 350,
|
|
615
|
+
"activeAdCount": 92
|
|
616
|
+
}
|
|
617
|
+
}
|
|
618
|
+
```
|
|
619
|
+
|
|
620
|
+
---
|
|
621
|
+
|
|
622
|
+
### `baker ads google library search-competitors "keyword"`
|
|
623
|
+
|
|
624
|
+
Search for competitors running Google ads for a keyword. Uses DataForSEO (same data as `baker research advertisers`).
|
|
625
|
+
|
|
626
|
+
```bash
|
|
627
|
+
baker ads google library search-competitors "running shoes"
|
|
628
|
+
baker ads google library search-competitors "crm software" --location uk
|
|
629
|
+
```
|
|
630
|
+
|
|
631
|
+
**Flags:**
|
|
632
|
+
|
|
633
|
+
| Flag | Description |
|
|
634
|
+
|--------------|----------------------------|
|
|
635
|
+
| `--location` | Location name or code |
|
|
636
|
+
| `--json` | Output in JSON format |
|
|
637
|
+
|
|
638
|
+
---
|
|
639
|
+
|
|
378
640
|
### Caching
|
|
379
641
|
|
|
380
642
|
Google Ads data is cached at two levels:
|
|
@@ -421,11 +683,213 @@ All errors include a `fix` object with `action`, `correctedCommand` (when applic
|
|
|
421
683
|
|
|
422
684
|
---
|
|
423
685
|
|
|
686
|
+
### Google Analytics 4 (`baker ga4`)
|
|
687
|
+
|
|
688
|
+
GA4 commands for multi-channel audits. Playbook-aligned presets, property health audits, and free-form Data API queries.
|
|
689
|
+
|
|
690
|
+
---
|
|
691
|
+
|
|
692
|
+
### `baker ga4 properties`
|
|
693
|
+
|
|
694
|
+
List accessible GA4 properties. Run this first to find property IDs.
|
|
695
|
+
|
|
696
|
+
```bash
|
|
697
|
+
baker ga4 properties
|
|
698
|
+
```
|
|
699
|
+
|
|
700
|
+
---
|
|
701
|
+
|
|
702
|
+
### `baker ga4 audit`
|
|
703
|
+
|
|
704
|
+
Run all GA4 admin health checks at once. Checks data retention, Google Ads linkage, phantom conversions, audience defaults, data streams, and attribution settings.
|
|
705
|
+
|
|
706
|
+
```bash
|
|
707
|
+
baker ga4 audit
|
|
708
|
+
baker ga4 audit --property-id properties/123456789
|
|
709
|
+
```
|
|
710
|
+
|
|
711
|
+
Returns raw config data plus playbook-aligned warnings:
|
|
712
|
+
|
|
713
|
+
```json
|
|
714
|
+
{
|
|
715
|
+
"ok": true,
|
|
716
|
+
"data": { "property": {...}, "dataRetention": {...}, "conversionEvents": [...] },
|
|
717
|
+
"warnings": [
|
|
718
|
+
{ "code": "SHORT_RETENTION", "message": "Data retention is TWO_MONTHS — should be FOURTEEN_MONTHS" },
|
|
719
|
+
{ "code": "PHANTOM_CONVERSION", "message": "\"page_view\" is marked as a conversion event" }
|
|
720
|
+
]
|
|
721
|
+
}
|
|
722
|
+
```
|
|
723
|
+
|
|
724
|
+
---
|
|
725
|
+
|
|
726
|
+
### `baker ga4 query`
|
|
727
|
+
|
|
728
|
+
Run GA4 Data API reports. Presets are the primary interface; free-form dimensions/metrics is the escape hatch.
|
|
729
|
+
|
|
730
|
+
```bash
|
|
731
|
+
# Playbook presets
|
|
732
|
+
baker ga4 query --preset tracking-health
|
|
733
|
+
baker ga4 query --preset lp-performance --days 14
|
|
734
|
+
baker ga4 query --preset funnel-leakage --out funnel.csv
|
|
735
|
+
baker ga4 query --list-presets
|
|
736
|
+
|
|
737
|
+
# Free-form
|
|
738
|
+
baker ga4 query --dimensions "date,sessionSourceMedium" --metrics "sessions,conversions"
|
|
739
|
+
```
|
|
740
|
+
|
|
741
|
+
**Flags:**
|
|
742
|
+
|
|
743
|
+
| Flag | Description |
|
|
744
|
+
|------|-------------|
|
|
745
|
+
| `--preset` | Named preset (see below) |
|
|
746
|
+
| `--dimensions` | Comma-separated GA4 dimension names |
|
|
747
|
+
| `--metrics` | Comma-separated GA4 metric names |
|
|
748
|
+
| `--days` | Lookback window in days (default: 30) |
|
|
749
|
+
| `--start-date` | Start date (YYYY-MM-DD or GA4 relative like "30daysAgo") |
|
|
750
|
+
| `--end-date` | End date (YYYY-MM-DD or "yesterday") |
|
|
751
|
+
| `--limit` | Max rows (default: 1000) |
|
|
752
|
+
| `--property-id` | GA4 property ID (auto-resolved if not provided) |
|
|
753
|
+
| `--out` | Write to file (.csv, .jsonl, .json) |
|
|
754
|
+
| `--output` | Format: json\|csv\|jsonl\|md |
|
|
755
|
+
| `--no-cache` | Skip cache |
|
|
756
|
+
|
|
757
|
+
**Presets:**
|
|
758
|
+
|
|
759
|
+
| Preset | Playbook | What it answers |
|
|
760
|
+
|--------|----------|-----------------|
|
|
761
|
+
| `tracking-health` | [07] Discrepancy | Is GA4 tracking matching GAds? (>20% gap = broken) |
|
|
762
|
+
| `lp-performance` | [06] LP Diagnostic | Which LPs have bad UX? (<10s = message mismatch) |
|
|
763
|
+
| `traffic-quality` | [06] Warm Traffic | Is Smart Bidding cherry-picking returning users? |
|
|
764
|
+
| `funnel-leakage` | [06] Funnel Analysis | Where do users drop off in the funnel? |
|
|
765
|
+
| `first-touch` | First-Touch | What channels actually acquire new users? |
|
|
766
|
+
| `traffic-overview` | General | General traffic trends |
|
|
767
|
+
|
|
768
|
+
---
|
|
769
|
+
|
|
770
|
+
### Google Search Console (`baker gsc`)
|
|
771
|
+
|
|
772
|
+
GSC commands for PPC-SEO arbitrage, brand halo analysis, and negative keyword discovery.
|
|
773
|
+
|
|
774
|
+
---
|
|
775
|
+
|
|
776
|
+
### `baker gsc sites`
|
|
777
|
+
|
|
778
|
+
List verified Search Console sites.
|
|
779
|
+
|
|
780
|
+
```bash
|
|
781
|
+
baker gsc sites
|
|
782
|
+
```
|
|
783
|
+
|
|
784
|
+
---
|
|
785
|
+
|
|
786
|
+
### `baker gsc query`
|
|
787
|
+
|
|
788
|
+
Run Search Analytics queries. Presets are the primary interface.
|
|
789
|
+
|
|
790
|
+
```bash
|
|
791
|
+
# Playbook presets
|
|
792
|
+
baker gsc query --preset cannibalization
|
|
793
|
+
baker gsc query --preset brand-halo --brand "Acme" --days 90
|
|
794
|
+
baker gsc query --preset negative-keywords --out negatives.csv
|
|
795
|
+
baker gsc query --list-presets
|
|
796
|
+
|
|
797
|
+
# Free-form
|
|
798
|
+
baker gsc query --dimensions "query,page" --days 28
|
|
799
|
+
baker gsc query --dimensions "query" --row-limit 25000 --out keywords.csv
|
|
800
|
+
```
|
|
801
|
+
|
|
802
|
+
**Flags:**
|
|
803
|
+
|
|
804
|
+
| Flag | Description |
|
|
805
|
+
|------|-------------|
|
|
806
|
+
| `--preset` | Named preset (see below) |
|
|
807
|
+
| `--brand` | Brand name (required for brand-halo preset) |
|
|
808
|
+
| `--dimensions` | Comma-separated: query, page, country, device, date |
|
|
809
|
+
| `--days` | Lookback window (default: 28) |
|
|
810
|
+
| `--start-date` / `--end-date` | Explicit date range |
|
|
811
|
+
| `--row-limit` | Max rows (default: 1000, max: 25000) |
|
|
812
|
+
| `--type` | Search type: web\|image\|video\|news\|discover |
|
|
813
|
+
| `--site-url` | Site URL (auto-resolved if not provided) |
|
|
814
|
+
| `--out` | Write to file |
|
|
815
|
+
| `--output` | Format: json\|csv\|jsonl\|md |
|
|
816
|
+
| `--no-cache` | Skip cache |
|
|
817
|
+
|
|
818
|
+
**Presets:**
|
|
819
|
+
|
|
820
|
+
| Preset | Playbook | What it answers |
|
|
821
|
+
|--------|----------|-----------------|
|
|
822
|
+
| `cannibalization` | [05] PPC-SEO Arbitrage | Which queries rank #1-2 organically where you also pay? |
|
|
823
|
+
| `missed-revenue` | [05] Opportunity | High-impression queries with no PPC coverage? |
|
|
824
|
+
| `brand-halo` | [21] YouTube/DG ROI | Is upper-funnel spend driving brand searches? |
|
|
825
|
+
| `negative-keywords` | Negative Discovery | Queries to add as negative keywords |
|
|
826
|
+
| `top-pages` | General | Top performing pages |
|
|
827
|
+
| `top-queries` | General | Top search queries |
|
|
828
|
+
|
|
829
|
+
---
|
|
830
|
+
|
|
831
|
+
### `baker gsc sitemaps`
|
|
832
|
+
|
|
833
|
+
Check sitemap health for a site.
|
|
834
|
+
|
|
835
|
+
```bash
|
|
836
|
+
baker gsc sitemaps
|
|
837
|
+
baker gsc sitemaps --site-url "https://example.com/"
|
|
838
|
+
```
|
|
839
|
+
|
|
840
|
+
---
|
|
841
|
+
|
|
424
842
|
### Competitive Intelligence (`baker research`)
|
|
425
843
|
|
|
426
|
-
Market and competitor research powered by DataForSEO. Shows who's competing for keywords, search intent classification, competitor keyword strategies, keyword gaps,
|
|
844
|
+
Market and competitor research powered by DataForSEO and AI-powered Google Search grounding. Shows who's competing for keywords, search intent classification, competitor keyword strategies, keyword gaps, landing page performance, and open-ended AI research.
|
|
845
|
+
|
|
846
|
+
All DataForSEO research responses include a `note` field indicating that data is estimated from third-party SERP scraping and should be used for directional insights, not precise measurement.
|
|
847
|
+
|
|
848
|
+
---
|
|
849
|
+
|
|
850
|
+
### `baker research web "question"`
|
|
851
|
+
|
|
852
|
+
Search the web with AI to answer any open-ended marketing question — competitors, ICP, pricing, pain points, market trends. Uses live internet data via Google Search.
|
|
853
|
+
|
|
854
|
+
```bash
|
|
855
|
+
baker research web "Who are the main competitors of HubSpot CRM?"
|
|
856
|
+
baker research web "What are the top pain points for SMB CRM buyers?" --depth high
|
|
857
|
+
baker research web "Full competitive analysis of project management SaaS" --depth xhigh
|
|
858
|
+
baker research web "What is the pricing of monday.com?" --output md
|
|
859
|
+
```
|
|
860
|
+
|
|
861
|
+
**Depth levels:**
|
|
862
|
+
|
|
863
|
+
| Depth | Model | Use case | Timeout |
|
|
864
|
+
|-------|-------|----------|---------|
|
|
865
|
+
| `medium` (default) | Gemini Flash + minimal thinking | Quick lookups | 3m |
|
|
866
|
+
| `high` | Gemini Flash + deep thinking | Thorough answers | 6m |
|
|
867
|
+
| `xhigh` | Gemini Deep Research | Exhaustive research (use sparingly) | 15m |
|
|
868
|
+
|
|
869
|
+
**Response:**
|
|
870
|
+
|
|
871
|
+
```json
|
|
872
|
+
{
|
|
873
|
+
"ok": true,
|
|
874
|
+
"data": {
|
|
875
|
+
"answer": "## HubSpot CRM Competitors\n\n### 1. Salesforce\n...",
|
|
876
|
+
"sources": [
|
|
877
|
+
{ "title": "HubSpot vs Salesforce", "url": "https://..." }
|
|
878
|
+
]
|
|
879
|
+
},
|
|
880
|
+
"fields": {
|
|
881
|
+
"answer": "AI-generated research answer (markdown)",
|
|
882
|
+
"sources": "Array of {title, url} sources used for grounding"
|
|
883
|
+
}
|
|
884
|
+
}
|
|
885
|
+
```
|
|
886
|
+
|
|
887
|
+
**Flags:**
|
|
427
888
|
|
|
428
|
-
|
|
889
|
+
| Flag | Description |
|
|
890
|
+
|------------|------------------------------------------------------|
|
|
891
|
+
| `--depth` | Research depth: medium (default), high, xhigh |
|
|
892
|
+
| `--output` | Format: json (default), md (raw markdown + sources) |
|
|
429
893
|
|
|
430
894
|
---
|
|
431
895
|
|
|
@@ -917,9 +1381,9 @@ For machine-readable introspection, use `baker schema` (see below).
|
|
|
917
1381
|
|
|
918
1382
|
This CLI is designed for AI agent consumption. Key patterns:
|
|
919
1383
|
|
|
920
|
-
1. **Start with `baker ads google accounts
|
|
921
|
-
2. **Use
|
|
922
|
-
3. **
|
|
1384
|
+
1. **Start with account discovery** — `baker ads google accounts`, `baker ga4 properties`, `baker gsc sites`
|
|
1385
|
+
2. **Use presets** (`--preset campaign-performance`, `--preset tracking-health`, `--preset cannibalization`) — saves tokens, answers playbook questions
|
|
1386
|
+
3. **Run `--list-presets`** on query commands to see available templates
|
|
923
1387
|
4. **Read the `fields` object** in responses to understand what each column means
|
|
924
1388
|
5. **Check `fix.correctedCommand`** on errors — copy-paste it to retry
|
|
925
1389
|
6. **Use `--all --out file.csv`** for large exports to avoid filling context window
|
package/dist/cli.js
CHANGED
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import { defineCommand, runMain } from "citty";
|
|
3
3
|
import { adsCommand } from "./commands/ads/index.js";
|
|
4
|
+
import { ga4Command } from "./commands/ga4/index.js";
|
|
5
|
+
import { gscCommand } from "./commands/gsc/index.js";
|
|
4
6
|
import { imagesCommand } from "./commands/images/index.js";
|
|
5
7
|
import { researchCommand } from "./commands/research/index.js";
|
|
6
8
|
import { schemaCommand } from "./commands/schema.js";
|
|
@@ -9,7 +11,7 @@ import { videosCommand } from "./commands/videos/index.js";
|
|
|
9
11
|
const main = defineCommand({
|
|
10
12
|
meta: {
|
|
11
13
|
name: "baker",
|
|
12
|
-
version: "0.
|
|
14
|
+
version: "0.18.0",
|
|
13
15
|
description: `AI-agent CLI for finding and managing images, videos, testimonials, and ad platform data in Baker.
|
|
14
16
|
|
|
15
17
|
Auth: Set BAKER_API_KEY (starts with bk_) and BAKER_API_URL environment variables.
|
|
@@ -19,6 +21,8 @@ Introspection: Run 'baker schema <command>' to inspect argument schemas.`,
|
|
|
19
21
|
},
|
|
20
22
|
subCommands: {
|
|
21
23
|
ads: adsCommand,
|
|
24
|
+
ga4: ga4Command,
|
|
25
|
+
gsc: gscCommand,
|
|
22
26
|
research: researchCommand,
|
|
23
27
|
images: imagesCommand,
|
|
24
28
|
videos: videosCommand,
|
package/dist/cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,aAAa,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AAC/C,OAAO,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AACrD,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAC3D,OAAO,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAC/D,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,mBAAmB,EAAE,MAAM,kCAAkC,CAAC;AACvE,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAE3D,MAAM,IAAI,GAAG,aAAa,CAAC;IACzB,IAAI,EAAE;QACJ,IAAI,EAAE,OAAO;QACb,OAAO,EAAE,QAAQ;QACjB,WAAW,EAAE;;;;;yEAKwD;KACtE;IACD,WAAW,EAAE;QACX,GAAG,EAAE,UAAU;QACf,QAAQ,EAAE,eAAe;QACzB,MAAM,EAAE,aAAa;QACrB,MAAM,EAAE,aAAa;QACrB,YAAY,EAAE,mBAAmB;QACjC,MAAM,EAAE,aAAa;KACtB;CACF,CAAC,CAAC;AAEH,OAAO,CAAC,IAAI,CAAC,CAAC"}
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,aAAa,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AAC/C,OAAO,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AACrD,OAAO,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AACrD,OAAO,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AACrD,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAC3D,OAAO,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAC/D,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,mBAAmB,EAAE,MAAM,kCAAkC,CAAC;AACvE,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAE3D,MAAM,IAAI,GAAG,aAAa,CAAC;IACzB,IAAI,EAAE;QACJ,IAAI,EAAE,OAAO;QACb,OAAO,EAAE,QAAQ;QACjB,WAAW,EAAE;;;;;yEAKwD;KACtE;IACD,WAAW,EAAE;QACX,GAAG,EAAE,UAAU;QACf,GAAG,EAAE,UAAU;QACf,GAAG,EAAE,UAAU;QACf,QAAQ,EAAE,eAAe;QACzB,MAAM,EAAE,aAAa;QACrB,MAAM,EAAE,aAAa;QACrB,YAAY,EAAE,mBAAmB;QACjC,MAAM,EAAE,aAAa;KACtB;CACF,CAAC,CAAC;AAEH,OAAO,CAAC,IAAI,CAAC,CAAC"}
|
package/dist/client.d.ts
CHANGED
|
@@ -5,6 +5,8 @@ export declare class ApiError extends Error {
|
|
|
5
5
|
}
|
|
6
6
|
export declare function validateConvexId(id: string): void;
|
|
7
7
|
export declare function apiGet<T>(path: string, params?: Record<string, string>): Promise<T>;
|
|
8
|
-
export declare function apiPost<T>(path: string, body: unknown
|
|
8
|
+
export declare function apiPost<T>(path: string, body: unknown, opts?: {
|
|
9
|
+
timeoutMs?: number;
|
|
10
|
+
}): Promise<T>;
|
|
9
11
|
export {};
|
|
10
12
|
//# sourceMappingURL=client.d.ts.map
|
package/dist/client.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAEA,KAAK,SAAS,GACV,cAAc,GACd,WAAW,GACX,kBAAkB,GAClB,cAAc,GACd,gBAAgB,GAChB,eAAe,GACf,SAAS,CAAC;AAEd,qBAAa,QAAS,SAAQ,KAAK;IACjC,IAAI,EAAE,SAAS,CAAC;gBAEJ,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM;CAK7C;AAqBD,wBAAgB,gBAAgB,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI,CAIjD;AAsDD,wBAAsB,MAAM,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CA4BzF;AAED,wBAAsB,OAAO,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,GAAG,OAAO,CAAC,CAAC,CAAC,
|
|
1
|
+
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAEA,KAAK,SAAS,GACV,cAAc,GACd,WAAW,GACX,kBAAkB,GAClB,cAAc,GACd,gBAAgB,GAChB,eAAe,GACf,SAAS,CAAC;AAEd,qBAAa,QAAS,SAAQ,KAAK;IACjC,IAAI,EAAE,SAAS,CAAC;gBAEJ,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM;CAK7C;AAqBD,wBAAgB,gBAAgB,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI,CAIjD;AAsDD,wBAAsB,MAAM,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CA4BzF;AAED,wBAAsB,OAAO,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,CAAC,EAAE;IAAE,SAAS,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,OAAO,CAAC,CAAC,CAAC,CAuBvG"}
|
package/dist/client.js
CHANGED
|
@@ -107,8 +107,9 @@ export async function apiGet(path, params) {
|
|
|
107
107
|
}
|
|
108
108
|
return handleResponse(response);
|
|
109
109
|
}
|
|
110
|
-
export async function apiPost(path, body) {
|
|
110
|
+
export async function apiPost(path, body, opts) {
|
|
111
111
|
const env = getEnv();
|
|
112
|
+
const timeoutMs = opts?.timeoutMs ?? 60_000;
|
|
112
113
|
let response;
|
|
113
114
|
try {
|
|
114
115
|
response = await fetch(new URL(path, env.BAKER_API_URL).toString(), {
|
|
@@ -119,12 +120,12 @@ export async function apiPost(path, body) {
|
|
|
119
120
|
Accept: "application/json",
|
|
120
121
|
},
|
|
121
122
|
body: JSON.stringify(body),
|
|
122
|
-
signal: AbortSignal.timeout(
|
|
123
|
+
signal: AbortSignal.timeout(timeoutMs),
|
|
123
124
|
});
|
|
124
125
|
}
|
|
125
126
|
catch (err) {
|
|
126
127
|
if (err instanceof Error && (err.name === "TimeoutError" || err.name === "AbortError")) {
|
|
127
|
-
throw new ApiError("TIMEOUT",
|
|
128
|
+
throw new ApiError("TIMEOUT", `Request timed out after ${Math.round(timeoutMs / 1000)} seconds`);
|
|
128
129
|
}
|
|
129
130
|
throw new ApiError("NETWORK_ERROR", `Request failed: ${err instanceof Error ? err.message : "Unknown error"}`);
|
|
130
131
|
}
|
package/dist/client.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"accounts.d.ts","sourceRoot":"","sources":["../../../../src/commands/ads/google/accounts.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"accounts.d.ts","sourceRoot":"","sources":["../../../../src/commands/ads/google/accounts.ts"],"names":[],"mappings":"AAkDA,eAAO,MAAM,eAAe;;;;;;;;;;;;EAuC1B,CAAC"}
|
|
@@ -10,17 +10,20 @@ registerSchema({
|
|
|
10
10
|
"no-cache": { type: "boolean", description: "Skip cache, hit API directly", required: false },
|
|
11
11
|
},
|
|
12
12
|
});
|
|
13
|
+
import { handleConnectionError } from "../../../error-handler.js";
|
|
13
14
|
function handleAccountsError(err) {
|
|
14
15
|
if (err instanceof ApiError) {
|
|
15
|
-
|
|
16
|
+
if (err.code === "UNAUTHORIZED" || err.code === "NOT_FOUND") {
|
|
17
|
+
handleConnectionError("google_ads", err.message);
|
|
18
|
+
}
|
|
16
19
|
const envelope = {
|
|
17
20
|
ok: false,
|
|
18
21
|
error: {
|
|
19
|
-
code:
|
|
22
|
+
code: err.code,
|
|
20
23
|
message: err.message,
|
|
21
24
|
fix: {
|
|
22
|
-
action:
|
|
23
|
-
explanation:
|
|
25
|
+
action: "reject",
|
|
26
|
+
explanation: err.message,
|
|
24
27
|
},
|
|
25
28
|
retryable: false,
|
|
26
29
|
},
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"accounts.js","sourceRoot":"","sources":["../../../../src/commands/ads/google/accounts.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AACtC,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACjD,OAAO,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAG5D,cAAc,CAAC;IACb,OAAO,EAAE,qBAAqB;IAC9B,WAAW,EACT,iPAAiP;IACnP,IAAI,EAAE;QACJ,UAAU,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,WAAW,EAAE,8BAA8B,EAAE,QAAQ,EAAE,KAAK,EAAE;KAC9F;CACF,CAAC,CAAC;AAUH,SAAS,mBAAmB,CAAC,GAAY;IACvC,IAAI,GAAG,YAAY,QAAQ,EAAE,CAAC;QAC5B,
|
|
1
|
+
{"version":3,"file":"accounts.js","sourceRoot":"","sources":["../../../../src/commands/ads/google/accounts.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/commands/ads/google/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/commands/ads/google/index.ts"],"names":[],"mappings":"AAQA,eAAO,MAAM,aAAa,qDAyBxB,CAAC"}
|