SnowcatCloud, Inc. | Cloud-hosted Snowplow, affording companies true ownership of event-level data.

Snowplow Event Routing

Cost-Efficient Event Routing That Scales

Route Snowplow JSON enriched events with AWS EventBridge, a serverless event router to power your event-driven applications at scale, cost-effectively, and with zero management.

Marketing attribution for the modern data stack

Cost-Efficient Event Routing That Scales

Use the power, scale and cost effectiveness of AWS EventBridge to route Snowplow Events and expand your event-driven architecture.

Unbeatable & Predictable Cost

At 1 USD per million events it will be difficult to outgrow EventBridge.

No Yearly Renewal Price Gouging

Avoid event routing vendor lock-in and yearly renewal price gouging.

Filter & Route Events Anywhere

Filter and route your Snowplow events to HTTP, Lambda or other AWS Services.

Persistent Event Routing

Auto retries and dead-letter queues make sure your events are safe when delivery fails.

Why Use AWS EventBridge?

  • Unbeatable low cost at 1 USD/million events

  • No vendor lock-in, it runs on your AWS infrastructure

  • Scalable, simple and with no maintainance

  • Fully featured event replay

  • Integrate events with optional transform, filter and enrich steps.

  • Schedule and trigger events and tasks on a schedule

Ingest Snowplow Enriched JSON into your AWS EventBridge and Route, Filter and Replay Events to your event-driven applications.

Iceberg Identity Graph integrated with modern data stack

Trusted by

SnowcatCloud is trusted by companies worldwide and cross-industry to safely and reliably collect and process behavioral customer data at scale.

Metabase
Meltano
My Muscle Chef
ODA
Pinter
Shred
LittleBirdie
Onsip

Snowplow & AWS EventBridge

Use AWS EventBridge and AWS infrastructure to setup a real-time, reliable, and cost-effective event routing solution for your event data. Filter, route, and enrich based on any Snowplow Enriched JSON parameters.

AWS EventBridge AWS EventBridge

Target Name: AWS Lambda
Input: Matched event
Retry attempts: 185
Max age: 24h
Dead-letter queue: AWS SQS queue
Event Pattern: { "detail.page_urlhost": ["www.snowcatcloud.com"] }

Snowplow Event Routing

AWS EventBridge Snowplow Enriched JSON (Source)

Example Snowplow Enriched JSON payload (detail).


{
    "version": "0",
    "id": "c94ca316-938c-a3fa-e2a5-025c1f44280b",
    "detail-type": "enrich-event",
    "source": "snowcatcloud",
    "account": "494503561239",
    "time": "2023-06-05T22:01:32Z",
    "region": "us-west-2",
    "resources": [],
    "detail": {
        "collector": "dev.snowcatcloud.com",
        "payload":"BASE64ENCODED",
        "page_urlhost": "www.snowcatcloud.com",
        "br_features_realplayer": false,
        "etl_tstamp": "2023-06-05T22:01:31.666Z",
        "dvce_ismobile": null,
        "geo_latitude": null,
        "refr_medium": null,
        "ti_orderid": null,
        "br_version": null,
        "base_currency": null,
        "v_collector": "ssc-kinesis",
        "mkt_content": null,
        "collector_tstamp": "2023-06-05T22:01:00.596Z",
        "os_family": null,
        "ti_sku": null,
        "event_vendor": "com.snowplowanalytics.snowplow",
        "contexts_com_dbip_isp_1": [{
            "traits": {
                "autonomous_system_number": 20001,
                "autonomous_system_organization": "Charter Communications Inc",
                "connection_type": "Corporate",
                "isp": "Charter Communications",
                "organization": "Spectrum",
                "user_type": "business"
            }
        }],
        "network_userid": "77a06a7f-58b2-464c-8916-653edd8d6788",
        "contexts_com_snowplowanalytics_snowplow_web_page_1": [{
            "id": "beb1135b-e282-43e1-a4ca-d991604c8411"
        }],
        "br_renderengine": null,
        "br_lang": "en-US",
        "tr_affiliation": null,
        "ti_quantity": null,
        "ti_currency": null,
        "contexts_org_ietf_http_header_1": [{
                "name": "X-Forwarded-For",
                "value": "75.80.110.186"
            },
            {
                "name": "Host",
                "value": "dev.snowcatcloud.com"
            },
            {
                "name": "User-Agent",
                "value": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36"
            },
            {
                "name": "Origin",
                "value": "https://www.snowcatcloud.com"
            },
            {
                "name": "Referer",
                "value": "https://www.snowcatcloud.com/"
            }
        ],
        "geo_country": null,
        "user_fingerprint": null,
        "mkt_medium": null,
        "page_urlscheme": "https",
        "ti_category": null,
        "pp_yoffset_min": null,
        "br_features_quicktime": false,
        "event": "page_view",
        "refr_urlhost": null,
        "user_ipaddress": "75.80.110.186",
        "br_features_pdf": true,
        "page_referrer": null,
        "doc_height": 392,
        "refr_urlscheme": null,
        "geo_region": null,
        "geo_timezone": null,
        "page_urlfragment": null,
        "br_features_flash": false,
        "os_manufacturer": null,
        "mkt_clickid": null,
        "ti_price": null,
        "br_colordepth": "24",
        "event_format": "jsonschema",
        "tr_total": null,
        "pp_xoffset_min": null,
        "doc_width": 1745,
        "geo_zipcode": null,
        "br_family": null,
        "tr_currency": null,
        "useragent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36",
        "event_name": "page_view",
        "os_name": null,
        "page_urlpath": "/",
        "br_name": null,
        "ip_netspeed": null,
        "page_title": null,
        "contexts_com_dbip_location_1": [{
            "city": {
                "geoname_id": 5342353,
                "names": {
                    "en": "Del Mar",
                    "fa": "دل مار، کالیفرنیا",
                    "ja": "デル・マー",
                    "zh-CN": "德尔马"
                }
            },
            "continent": {
                "code": "NA",
                "geoname_id": 6255149,
                "names": {
                    "de": "Nordamerika",
                    "en": "North America",
                    "es": "Norteamérica",
                    "fa": " امریکای شمالی",
                    "fr": "Amérique Du Nord",
                    "ja": "北アメリカ大陸",
                    "ko": "북아메리카",
                    "pt-BR": "América Do Norte",
                    "ru": "Северная Америка",
                    "zh-CN": "北美洲"
                }
            },
            "country": {
                "geoname_id": 6252001,
                "is_in_european_union": false,
                "iso_code": "US",
                "names": {
                    "de": "Vereinigte Staaten von Amerika",
                    "en": "United States",
                    "es": "Estados Unidos de América (los)",
                    "fa": "ایالات متحدهٔ امریکا",
                    "fr": "États-Unis",
                    "ja": "アメリカ合衆国",
                    "ko": "미국",
                    "pt-BR": "Estados Unidos",
                    "ru": "США",
                    "zh-CN": "美国"
                }
            },
            "location": {
                "latitude": 32.9595,
                "longitude": -117.265,
                "time_zone": "America/Los_Angeles",
                "weather_code": "USCA0288"
            },
            "postal": {
                "code": "92014"
            },
            "subdivisions": [{
                    "geoname_id": 5332921,
                    "iso_code": "CA",
                    "names": {
                        "de": "Kalifornien",
                        "en": "California",
                        "es": "California",
                        "fa": "کالیفرنیا",
                        "fr": "Californie",
                        "ja": "カリフォルニア",
                        "ko": "캘리포니아 주",
                        "pt-BR": "Califórnia",
                        "ru": "Калифорния",
                        "zh-CN": "加州"
                    }
                },
                {
                    "geoname_id": 5391832,
                    "names": {
                        "en": "San Diego",
                        "es": "Condado de San Diego",
                        "fa": "شهرستان سن دیگو، کالیفرنیا",
                        "fr": "Comté de San Diego",
                        "ja": "サンディエゴ郡",
                        "ko": "샌디에이고 군",
                        "pt-BR": "Condado de San Diego",
                        "ru": "Сан-Диего",
                        "zh-CN": "圣迭戈县"
                    }
                }
            ]
        }],
        "ip_organization": null,
        "dvce_created_tstamp": "2023-06-05T22:01:00.263Z",
        "br_features_gears": false,
        "dvce_type": null,
        "dvce_sent_tstamp": "2023-06-05T22:01:00.266Z",
        "se_action": null,
        "br_features_director": false,
        "se_category": null,
        "ti_name": null,
        "user_id": null,
        "refr_urlquery": null,
        "true_tstamp": null,
        "geo_longitude": null,
        "mkt_term": null,
        "v_tracker": "js-2.14.0",
        "os_timezone": "America/Los_Angeles",
        "br_type": null,
        "br_features_windowsmedia": false,
        "event_version": "1-0-0",
        "dvce_screenwidth": 1920,
        "refr_dvce_tstamp": null,
        "se_label": null,
        "domain_sessionid": "6613357d-c330-4e69-b494-f68e0017f268",
        "domain_userid": "ab6f32fa-31a3-437d-ac2b-6d3648b159fa",
        "page_urlquery": null,
        "refr_term": null,
        "name_tracker": "cf",
        "tr_tax_base": null,
        "dvce_screenheight": 1200,
        "mkt_campaign": null,
        "refr_urlfragment": null,
        "contexts_com_snowplowanalytics_snowplow_ua_parser_context_1": [{
            "useragentFamily": "Chrome",
            "useragentMajor": "113",
            "useragentMinor": "0",
            "useragentPatch": "0",
            "useragentVersion": "Chrome 113.0.0",
            "osFamily": "Mac OS X",
            "osMajor": "10",
            "osMinor": "15",
            "osPatch": "7",
            "osPatchMinor": null,
            "osVersion": "Mac OS X 10.15.7",
            "deviceFamily": "Other"
        }],
        "tr_shipping": null,
        "tr_shipping_base": null,
        "br_features_java": false,
        "br_viewwidth": 1745,
        "geo_city": null,
        "br_viewheight": 392,
        "refr_domain_userid": null,
        "br_features_silverlight": false,
        "ti_price_base": null,
        "tr_tax": null,
        "br_cookies": true,
        "tr_total_base": null,
        "refr_urlport": null,
        "derived_tstamp": "2023-06-05T22:01:00.593Z",
        "app_id": "test",
        "ip_isp": null,
        "geo_region_name": null,
        "pp_yoffset_max": null,
        "ip_domain": null,
        "domain_sessionidx": 12,
        "pp_xoffset_max": null,
        "mkt_source": null,
        "page_urlport": 443,
        "se_property": null,
        "platform": "web",
        "contexts_nl_basjes_yauaa_context_1": [{
            "deviceBrand": "Apple",
            "deviceName": "Apple Macintosh",
            "operatingSystemVersionMajor": ">=10.15",
            "layoutEngineNameVersion": "Blink 113",
            "operatingSystemNameVersion": "Mac OS >=10.15.7",
            "agentInformationEmail": "Unknown",
            "networkType": "Unknown",
            "operatingSystemVersionBuild": "??",
            "webviewAppNameVersionMajor": "Unknown ??",
            "layoutEngineNameVersionMajor": "Blink 113",
            "operatingSystemName": "Mac OS",
            "agentVersionMajor": "113",
            "layoutEngineVersionMajor": "113",
            "webviewAppName": "Unknown",
            "deviceClass": "Desktop",
            "agentNameVersionMajor": "Chrome 113",
            "operatingSystemNameVersionMajor": "Mac OS >=10.15",
            "deviceCpuBits": "64",
            "webviewAppVersionMajor": "??",
            "operatingSystemClass": "Desktop",
            "webviewAppVersion": "??",
            "layoutEngineName": "Blink",
            "agentName": "Chrome",
            "agentVersion": "113",
            "layoutEngineClass": "Browser",
            "agentNameVersion": "Chrome 113",
            "operatingSystemVersion": ">=10.15.7",
            "deviceCpu": "Intel",
            "agentClass": "Browser",
            "layoutEngineVersion": "113"
        }],
        "event_id": "9056e819-c71b-4282-bdcd-a9bce3e36c2d",
        "refr_urlpath": null,
        "mkt_network": null,
        "se_value": null,
        "page_url": "https://www.snowcatcloud.com/",
        "contexts_org_w3_performance_timing_1": [{
            "navigationStart": 1686002460122,
            "unloadEventStart": 1686002460169,
            "unloadEventEnd": 1686002460169,
            "redirectStart": 0,
            "redirectEnd": 0,
            "fetchStart": 1686002460124,
            "domainLookupStart": 1686002460124,
            "domainLookupEnd": 1686002460124,
            "connectStart": 1686002460124,
            "connectEnd": 1686002460124,
            "secureConnectionStart": 0,
            "requestStart": 1686002460125,
            "responseStart": 1686002460157,
            "responseEnd": 1686002460158,
            "domLoading": 1686002460170,
            "domInteractive": 1686002460174,
            "domContentLoadedEventStart": 1686002460213,
            "domContentLoadedEventEnd": 1686002460213,
            "domComplete": 1686002460213,
            "loadEventStart": 1686002460213,
            "loadEventEnd": 1686002460214
        }],
        "etl_tags": null,
        "tr_orderid": null,
        "tr_state": null,
        "txn_id": null,
        "refr_source": null,
        "tr_country": null,
        "tr_city": null,
        "doc_charset": "UTF-8",
        "event_fingerprint": "a42da4ddedcc70cc91b24b39932039fc",
        "v_etl": "snowplow-enrich-eventbridge"
    }
}

AWS EventBridge AWS Lambda (Destination)

Example AWS Lambda to forward Snowplow Enriched JSON to an HTTP endpoint.


import json
import urllib3
import os

def snowplow_event_forwarder(event, context):
    http = urllib3.PoolManager()
    snowplow = event['detail']
    
    data = {
        'page_urlhost': snowplow['page_urlhost'],
        'page_urlpath': snowplow['page_urlpath'],
        'connection_type': snowplow["contexts_com_dbip_isp_1"][0]["traits"]["connection_type"]
    }

    encoded_data = json.dumps(data).encode('utf-8')

    http.request(
        'POST',
        'https://www.destination.com/',
        body=encoded_data,
        headers={'Content-Type': 'application/json'}
    )