> Part of the walkerOS documentation. Project overview and full index: <https://www.walkeros.io/llms.txt>

# One event, four tools

This web flow sends one event stream to four analytics tools at once, with no per-tool mapping. The collector fans a single event out to every destination, and each tool receives it in its own native call shape.

```json
{
  "version": 4,
  "flows": {
    "default": {
      "config": {
        "platform": "web",
        "bundle": {
          "packages": {
            "@walkeros/collector": { "version": "^4" },
            "@walkeros/web-source-browser": { "version": "^4" },
            "@walkeros/web-destination-gtag": { "version": "^4" },
            "@walkeros/web-destination-amplitude": { "version": "^4" },
            "@walkeros/web-destination-mixpanel": { "version": "^4" },
            "@walkeros/web-destination-posthog": { "version": "^4" }
          }
        }
      },
      "sources": {
        "browser": {
          "package": "@walkeros/web-source-browser",
          "config": { "settings": { "pageview": true } }
        }
      },
      "destinations": {
        "ga4": {
          "package": "@walkeros/web-destination-gtag",
          "config": { "settings": { "ga4": { "measurementId": "G-XXXXXXXXXX" } } }
        },
        "amplitude": {
          "package": "@walkeros/web-destination-amplitude",
          "config": { "settings": { "apiKey": "test-project" } }
        },
        "mixpanel": {
          "package": "@walkeros/web-destination-mixpanel",
          "config": { "settings": { "apiKey": "test-project" } }
        },
        "posthog": {
          "package": "@walkeros/web-destination-posthog",
          "config": { "settings": { "apiKey": "phc_test" } }
        }
      },
      "collector": { "run": true }
    }
  }
}
```

## Run it[​](#run-it "Direct link to Run it")

Save the config as `flow.json` and push an order event with all four destinations mocked, one `--simulate` per destination. Each simulation runs its destination on its own, so this compares how each vendor receives the event; it is not a fan-out check of one running flow. This needs `@walkeros/cli` 4.7.1 or later. Nothing is sent to any vendor:

```bash
npx walkeros push flow.json -e '{"name":"order complete"}' \
  --simulate destination.ga4 --simulate destination.amplitude \
  --simulate destination.mixpanel --simulate destination.posthog
```

You should see, besides an `Output:` line naming the built bundle before each `Simulating` line:

```bash
Simulating destination: ga4
Simulating destination: amplitude
Simulating destination: mixpanel
Simulating destination: posthog
success: true
  destination.ga4
    mapping: none
    call window.gtag("config","G-XXXXXXXXXX",{})
    call window.gtag("event","order_complete",{"send_to":"G-XXXXXXXXXX"})
  destination.amplitude
    mapping: none
    call amplitude.initAll("test-project",{"analytics":{"autocapture":false,"identityStorage":"none"}})
    call amplitude.track("order complete",{})
  destination.mixpanel
    mapping: none
    call mixpanel.init("test-project",{"track_pageview":false,"autocapture":false})
    call mixpanel.track("order complete",{})
  destination.posthog
    mapping: none
    call posthog.init("phc_test",{"autocapture":false,"capture_pageview":false,"capture_pageleave":false,"loaded":"[Function loaded]"})
    call posthog.capture("order complete",{})
  Duration: 58844ms
```

## What each tool receives[​](#what-each-tool-receives "Direct link to What each tool receives")

The collector fans the same event out to all four destinations, and each one forwards it in its own native call (from the packages' examples):

```javascript
gtag('event', 'order_complete', { send_to: 'G-XXXXXXXXXX' })
amplitude.track('order complete', {})
mixpanel.track('order complete', {})
posthog.capture('order complete', {})
```

That is the routing half of the job: one stream, four tools, no per-tool code. The payload half is mapping: per-destination rules reshape the same event into each tool's expected schema, like the full GA4 purchase payload in [GA4 ecommerce](/preview/pr-749/docs/getting-started/ga4-ecommerce.md). Without mapping the name arrives in each tool's native call; with mapping the properties do too.

## Next steps[​](#next-steps "Direct link to Next steps")

* [**GA4 ecommerce**](/preview/pr-749/docs/getting-started/ga4-ecommerce.md): Map an order into a full GA4 purchase payload
* [**Mapping**](/preview/pr-749/docs/mapping.md): Transform events per destination
