{
  "schema_version": "1.0",
  "org_id": "kapaciti-modules",
  "module_id": "paid-ads-manager",
  "module_version": "1.0.0",
  "suite": "module-run",
  "run_id": "ee2fdd61-e337-4990-a850-a5739990c75c",
  "generated_at": "2026-05-19T21:41:51.014Z",
  "entries": [
    {
      "seq": 1,
      "block_type": "input_received",
      "timestamp": "2026-05-19T21:41:51.023Z",
      "content": {
        "input": {
          "snapshot_id": "ads-2026-05-19",
          "period": {
            "start": "2026-05-12",
            "end": "2026-05-18"
          },
          "channels": [
            {
              "name": "google-ads",
              "spend_sek": 48000,
              "impressions": 420000,
              "clicks": 8400,
              "conversions": 220,
              "revenue_sek": 132000,
              "cac_sek": 218,
              "roas": 2.75,
              "campaigns": [
                {
                  "id": "g-brand-001",
                  "name": "Brand search",
                  "spend_sek": 12000,
                  "roas": 8.5,
                  "ctr": 0.062,
                  "conversion_rate": 0.041,
                  "days_running": 90,
                  "status": "active"
                },
                {
                  "id": "g-shop-002",
                  "name": "Shopping general",
                  "spend_sek": 28000,
                  "roas": 2.1,
                  "ctr": 0.018,
                  "conversion_rate": 0.022,
                  "days_running": 45,
                  "status": "active"
                },
                {
                  "id": "g-perf-003",
                  "name": "Performance Max",
                  "spend_sek": 8000,
                  "roas": 1.8,
                  "ctr": 0.014,
                  "conversion_rate": 0.018,
                  "days_running": 14,
                  "status": "active"
                }
              ]
            },
            {
              "name": "meta-ads",
              "spend_sek": 32000,
              "impressions": 980000,
              "clicks": 14200,
              "conversions": 180,
              "revenue_sek": 88000,
              "cac_sek": 178,
              "roas": 2.75,
              "campaigns": [
                {
                  "id": "m-pros-001",
                  "name": "Prospecting cold",
                  "spend_sek": 18000,
                  "roas": 1.4,
                  "ctr": 0.011,
                  "conversion_rate": 0.008,
                  "days_running": 28,
                  "status": "active"
                },
                {
                  "id": "m-rt-002",
                  "name": "Retargeting",
                  "spend_sek": 14000,
                  "roas": 4.8,
                  "ctr": 0.024,
                  "conversion_rate": 0.038,
                  "days_running": 60,
                  "status": "active"
                }
              ]
            },
            {
              "name": "tiktok-ads",
              "spend_sek": 12000,
              "impressions": 1240000,
              "clicks": 18600,
              "conversions": 22,
              "revenue_sek": 11000,
              "cac_sek": 545,
              "roas": 0.92,
              "campaigns": [
                {
                  "id": "t-aware-001",
                  "name": "Brand awareness",
                  "spend_sek": 12000,
                  "roas": 0.9,
                  "ctr": 0.015,
                  "conversion_rate": 0.001,
                  "days_running": 35,
                  "status": "active"
                }
              ]
            }
          ],
          "total_budget_sek": 92000,
          "targets": {
            "min_roas": 2.5,
            "max_cac_sek": 250
          },
          "brand": {
            "name": "NordWear",
            "voice_profile_id": "customer"
          }
        },
        "module": "paid-ads-manager"
      },
      "content_snippet": "{\"input\":{\"snapshot_id\":\"ads-2026-05-19\",\"period\":{\"start\":\"2026-05-12\",\"end\":\"2026-05-18\"},\"channels\":[{\"name\":\"google-ads\",\"spend_sek\":48000,\"impressions\":420000,\"clicks\":8400,\"conversions\":220,\"revenue_sek\":132000,\"cac_sek\":218,\"roas\":2.75,\"campaigns\":[{\"id\":\"g-brand-001\",\"name\":\"Brand search\",\"…",
      "prev_hash": "0000000000000000000000000000000000000000000000000000000000000000",
      "this_hash": "4da639fd945c59e70c8ad41b729437e2a5be86a2c35f9f59c8888ad11e977b8d",
      "signature": "uxIQs8ItjRfFJadiWGoyHsC0anrnsbj8D0p21xNONryaA3HW6z7nVwXLMoZcNzWtnofCbfXV7cEpaUEp3VzxAA=="
    },
    {
      "seq": 2,
      "block_type": "context_loaded",
      "timestamp": "2026-05-19T21:41:51.024Z",
      "content": {
        "source_label": null,
        "source_present": false,
        "source_excerpt_length": 0
      },
      "content_snippet": "{\"source_label\":null,\"source_present\":false,\"source_excerpt_length\":0}",
      "prev_hash": "4da639fd945c59e70c8ad41b729437e2a5be86a2c35f9f59c8888ad11e977b8d",
      "this_hash": "0c2ad333d635aebbbfde61b4f3522b9cd4dc88b3296ecd2a3b38b9764d49065f",
      "signature": "LvBrIN7RihIxdbi6yVA/kKMmTEnYX9yID1xKkZK7tBqeQ+Y35IfKUXHZ1iaMCP4pNr6CvSvONrCKwTUs/gQDBQ=="
    },
    {
      "seq": 3,
      "block_type": "agent_call",
      "timestamp": "2026-05-19T21:41:51.024Z",
      "content": {
        "model": "claude-haiku-4-5",
        "system_prompt_length": 3558,
        "user_prompt_length": 1520,
        "voice": "kapaciti"
      },
      "content_snippet": "{\"model\":\"claude-haiku-4-5\",\"system_prompt_length\":3558,\"user_prompt_length\":1520,\"voice\":\"kapaciti\"}",
      "prev_hash": "0c2ad333d635aebbbfde61b4f3522b9cd4dc88b3296ecd2a3b38b9764d49065f",
      "this_hash": "867bc87d1408638c519011f985bef09ee6baaf3db7e1a881c4681ca1830312c7",
      "signature": "/vU8nr3qD498Zytu8yuUU1e91AgwreWoWEz4G/U7dkoOBkGprKprDuZfVutp8cCCV5GgFkY3LHSoe4c6TMsZAQ=="
    },
    {
      "seq": 4,
      "block_type": "output_generated",
      "timestamp": "2026-05-19T21:43:20.635Z",
      "content": {
        "output_length": 2405,
        "output": "TOTAL_BEDOMNING: kritisk\nROAS_TOTAL: 2.51\nCAC_TOTAL_SEK: 218\nKANAL_REKOMMENDATIONER:\n- KANAL: google-ads\n  ATGARD: bibehall\n  MOTIVERING: Kanalen ligger over malnivaer med ROAS 2.75 och CAC 218 sek. Google-brand presterar mycket starkt (ROAS 8.50) medan Performance Max ar ny och svag. Signals ar blandade mellan kampanjer men totalt stabilt och over target.\n  RISK: lag\n  FORTROENDE: hog\n- KANAL: meta-ads\n  ATGARD: bibehall\n  MOTIVERING: Meta ligger over target med ROAS 2.75. Retargeting presterar mycket starkt (ROAS 4.80, 60 dagar) medan prospecting ar under target (ROAS 1.40, 28 dagar). Kanalen som helhet stabil och over malnivaer.\n  RISK: lag\n  FORTROENDE: medel\n- KANAL: tiktok-ads\n  ATGARD: pausa\n  MOTIVERING: TikTok ar kritisk med ROAS 0.92 under 1.0 och CAC 545 sek motsvarar dubbla malvarde. Kampanj t-aware-001 kor 35 dagar utan forbattring. Konverteringsfrekvensen 0.10% indikerar att awareness-approach inte fungerar for denna kanal.\n  RISK: hog\n  FORTROENDE: lag\nKAMPANJ_VARNINGAR:\n- KAMPANJ: t-aware-001 | KANAL: tiktok-ads | PROBLEM: low-roas\n- KAMPANJ: t-aware-001 | KANAL: tiktok-ads | PROBLEM: high-cac\n- KAMPANJ: t-aware-001 | KANAL: tiktok-ads | PROBLEM: low-conversion-rate\nNYA_TESTER_FORESLAG:\n- Testa nytt creative-set eller copy-angle for TikTok before ny launch eller forkasta kanalen helt\n- Testa lookalike-audience for Meta prospecting baserat pa m-rt-002 customer-data since retargeting presterar mycket starkt\n- A/B test Google Shopping ads med alternativ product feed eller bid-strategi for att lyfta ROAS fran 2.10\nBUDGET_OMFORDELNING_SEK:\n- FRAN: tiktok-ads = -3600\n- FRAN: meta-ads = -2880\n- TILL: google-ads = +3600\n- TILL: meta-ads = +2880\nESKALERING_TILL_TEAM: ja\nESKALERINGS_ANLEDNING: TikTok-kanalen ar kritisk med ROAS under 1.0 och kravs pausning enligt performance-gateways. Rekommendation om pausa kravs team-godkannande innan implementering.\nSAMMANFATTNING_PA_SVENSKA:\nNordWear ligger just pa targets ROAS-mal (2.51) men TikTok-kanalen ar kritisk med ROAS 0.92 och CAC 545 sek, dubbelt over budget-limit. Google och Meta presterar stabilt over mal, sa kort sikt fokus bor vara att pausa TikTok awareness och omfördela budget till Google brand (ROAS 8.50) och Meta retargeting (ROAS 4.80) som ar de starkaste driverna. Innan ny TikTok-launch kravs test av helt nytt creative eller alternative approach eftersom awareness-angle inte genererar konverteringar.",
        "duration_ms": 89611
      },
      "content_snippet": "{\"output_length\":2405,\"output\":\"TOTAL_BEDOMNING: kritisk\\nROAS_TOTAL: 2.51\\nCAC_TOTAL_SEK: 218\\nKANAL_REKOMMENDATIONER:\\n- KANAL: google-ads\\n  ATGARD: bibehall\\n  MOTIVERING: Kanalen ligger over malnivaer med ROAS 2.75 och CAC 218 sek. Google-brand presterar mycket starkt (ROAS 8.50) medan Perform…",
      "prev_hash": "867bc87d1408638c519011f985bef09ee6baaf3db7e1a881c4681ca1830312c7",
      "this_hash": "c96109f67a74487dcd92ba793a545726e03f3f2bc6f7d8f2c74d49fd8ad59ffb",
      "signature": "UK2lOb24/UV9xFWXsnNk4v7/gHQmz23kkfYX8DxwDgCie2mOHjoc7DCvNaF5yFXBLrHHUtaZ6Vg7x/dg0TeeBQ=="
    },
    {
      "seq": 5,
      "block_type": "voice_validated",
      "timestamp": "2026-05-19T21:43:20.635Z",
      "content": {
        "ok": true,
        "violations": [],
        "voice_id": "kapaciti"
      },
      "content_snippet": "{\"ok\":true,\"violations\":[],\"voice_id\":\"kapaciti\"}",
      "prev_hash": "c96109f67a74487dcd92ba793a545726e03f3f2bc6f7d8f2c74d49fd8ad59ffb",
      "this_hash": "f114c5a8ec0a2bbd7200159caca8c6d03db2da3dc82fdc46233469a7d6e3be14",
      "signature": "B923NdRdE5sUyGnL/MKI0ovMTA3TFDep6tIkZUAMIFqN6dBRMRZQBI5usXWv6/2EdtvJ1tHKc1T/kXJ2Q4bRAQ=="
    },
    {
      "seq": 6,
      "block_type": "output_validated",
      "timestamp": "2026-05-19T21:43:20.637Z",
      "content": {
        "ok": true,
        "violations": [],
        "parsed": {
          "bedomning": "kritisk",
          "roas_total": 2.51,
          "cac_total_sek": 218,
          "channel_recommendations": [
            {
              "kanal": "google-ads",
              "atgard": "bibehall",
              "motivering": "Kanalen ligger over malnivaer med ROAS 2.75 och CAC 218 sek. Google-brand presterar mycket starkt (ROAS 8.50) medan Performance Max ar ny och svag. Signals ar blandade mellan kampanjer men totalt stabilt och over target. RISK: lag",
              "risk": "lag",
              "fortroende": "hog"
            },
            {
              "kanal": "meta-ads",
              "atgard": "bibehall",
              "motivering": "Meta ligger over target med ROAS 2.75. Retargeting presterar mycket starkt (ROAS 4.80, 60 dagar) medan prospecting ar under target (ROAS 1.40, 28 dagar). Kanalen som helhet stabil och over malnivaer. RISK: lag",
              "risk": "lag",
              "fortroende": "medel"
            },
            {
              "kanal": "tiktok-ads",
              "atgard": "pausa",
              "motivering": "TikTok ar kritisk med ROAS 0.92 under 1.0 och CAC 545 sek motsvarar dubbla malvarde. Kampanj t-aware-001 kor 35 dagar utan forbattring. Konverteringsfrekvensen 0.10% indikerar att awareness-approach inte fungerar for denna kanal. RISK: hog",
              "risk": "hog",
              "fortroende": "lag"
            }
          ],
          "kampanj_varningar": [
            {
              "campaign_id": "t-aware-001",
              "kanal": "tiktok-ads",
              "problem": "low-roas"
            },
            {
              "campaign_id": "t-aware-001",
              "kanal": "tiktok-ads",
              "problem": "high-cac"
            },
            {
              "campaign_id": "t-aware-001",
              "kanal": "tiktok-ads",
              "problem": "low-conversion-rate"
            }
          ],
          "nya_tester": [
            "Testa nytt creative-set eller copy-angle for TikTok before ny launch eller forkasta kanalen helt",
            "Testa lookalike-audience for Meta prospecting baserat pa m-rt-002 customer-data since retargeting presterar mycket starkt",
            "A/B test Google Shopping ads med alternativ product feed eller bid-strategi for att lyfta ROAS fran 2.10"
          ],
          "budget_reallocation": {
            "empty": false,
            "fran": [
              {
                "kanal": "tiktok-ads",
                "amount_sek": 3600
              },
              {
                "kanal": "meta-ads",
                "amount_sek": 2880
              }
            ],
            "till": [
              {
                "kanal": "google-ads",
                "amount_sek": 3600
              },
              {
                "kanal": "meta-ads",
                "amount_sek": 2880
              }
            ]
          },
          "escalation": "ja",
          "escalation_reason": "TikTok-kanalen ar kritisk med ROAS under 1.0 och kravs pausning enligt performance-gateways. Rekommendation om pausa kravs team-godkannande innan implementering.",
          "summary": "NordWear ligger just pa targets ROAS-mal (2.51) men TikTok-kanalen ar kritisk med ROAS 0.92 och CAC 545 sek, dubbelt over budget-limit. Google och Meta presterar stabilt over mal, sa kort sikt fokus bor vara att pausa TikTok awareness och omfördela budget till Google brand (ROAS 8.50) och Meta retargeting (ROAS 4.80) som ar de starkaste driverna. Innan ny TikTok-launch kravs test av helt nytt creative eller alternative approach eftersom awareness-angle inte genererar konverteringar."
        }
      },
      "content_snippet": "{\"ok\":true,\"violations\":[],\"parsed\":{\"bedomning\":\"kritisk\",\"roas_total\":2.51,\"cac_total_sek\":218,\"channel_recommendations\":[{\"kanal\":\"google-ads\",\"atgard\":\"bibehall\",\"motivering\":\"Kanalen ligger over malnivaer med ROAS 2.75 och CAC 218 sek. Google-brand presterar mycket starkt (ROAS 8.50) medan Per…",
      "prev_hash": "f114c5a8ec0a2bbd7200159caca8c6d03db2da3dc82fdc46233469a7d6e3be14",
      "this_hash": "76522802f870a6fdeeee2c7db815b1dd038c4c0f44aa0ced2961f13443f988fd",
      "signature": "JCxx/j3z//pmw2nMvl5zAsYrmaWUTT7LZ1i0de07wyQeT/PbR2/D0NyC8TQLcsuzIa5kBSVM+9vmVRET7RjrDw=="
    },
    {
      "seq": 7,
      "block_type": "audit_sealed",
      "timestamp": "2026-05-19T21:43:20.637Z",
      "content": {
        "total_blocks": 7,
        "status": "clean"
      },
      "content_snippet": "{\"total_blocks\":7,\"status\":\"clean\"}",
      "prev_hash": "76522802f870a6fdeeee2c7db815b1dd038c4c0f44aa0ced2961f13443f988fd",
      "this_hash": "9a810fb35361c17596ba5a5a17c0f685ad2cdfbc1769151b1f1ed7751dbe99f9",
      "signature": "5ZUFFbgselKfw73a1qBvqdd+1cVPf64CZ9d0Bhj95wfzQ8FtTx44IK83BYOL02/qI8sCroXRXDVK+uXZtnclCg=="
    }
  ],
  "public_key": "ebc55d86076a4df9c8bda4114dfde85e7d56a5671fc92d117c90accfe3d70dad",
  "public_key_fingerprint": "sha256:9eb469d44bcb8c3f9d52d2271ddeec36e4db7960d6b39ac1ac5a7edfe0dd49f5",
  "signature_algorithm": "ed25519",
  "hash_chain_valid": true
}