{"templateId":"markdown","sharedDataIds":{"sidebar":"sidebar-sidebars.yaml"},"props":{"metadata":{"markdoc":{"tagList":[]},"type":"markdown"},"seo":{"title":"Webhook Destinations — kwery Docs","siteUrl":"https://docs.kwery.co","description":"Configure where kwery delivers webhook events and batch/stream results."},"dynamicMarkdocComponents":[],"compilationErrors":[],"ast":{"$$mdtype":"Tag","name":"article","attributes":{},"children":[{"$$mdtype":"Tag","name":"Heading","attributes":{"level":1,"id":"destinations","__idx":0},"children":["Destinations"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Where kwery delivers your data. Pick the destination that matches how your team consumes"," ","results — you can mix destinations across jobs and subscriptions."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"webhooks","__idx":1},"children":["Webhooks"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["The default, self-serve destination. kwery pushes batch results and"," ",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"/guides/change-events"},"children":["change events"]}," directly to an HTTPS endpoint you control, signed with"," ","HMAC-SHA256 so you can verify authenticity."]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Streaming batch results: ",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"/guides/webhooks"},"children":["Webhooks"]},"."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Product monitoring: ",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"/guides/change-events"},"children":["Change events"]},"."]}]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Both share the same transport — signed headers, ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["2xx"]}," acknowledgment, and the same retry and"," ","replay behavior. No setup on our side beyond a ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["callback_url"]}," at submission time."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"object-storage","__idx":2},"children":["Object storage"]},{"$$mdtype":"Tag","name":"blockquote","attributes":{},"children":[{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Rolling out."]}," Bucket destinations are configured per account and are being enabled"," ","gradually — this is not yet a self-serve toggle. ",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"https://kwery.co/contact"},"children":["Contact us"]}," ","to have one set up."]}]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["For workflows that want files rather than HTTP callbacks, kwery can land results directly in"," ","a bucket you own — Amazon S3 or Google Cloud Storage. Each delivery is written as a file (one"," ","per batch, using the same structure as a stream delivery) instead of being POSTed to an"," ","endpoint."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["You provide the bucket and write credentials (an IAM role/policy for S3, a service account for"," ","GCS); kwery writes into a prefix you specify. Contact us to have a bucket destination attached"," ","to your account."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"id":"analytics","level":2,"__idx":3},"children":["Analytics & BI integrations — BigQuery, Snowflake, SQL, Tableau "]},{"$$mdtype":"Tag","name":"blockquote","attributes":{},"children":[{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Enterprise plan only."]}," Everything in this section is a ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["managed pipeline"]}," configured"," ","per account by the kwery team — it is not a self-serve toggle and not wired up through the"," ","API. ",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"https://kwery.co/contact"},"children":["Contact sales"]}," with your target system, expected volume,"," ","and schema preferences."]}]},{"$$mdtype":"Tag","name":"Heading","attributes":{"id":"pipeline","level":3,"__idx":4},"children":["How the pipelines work "]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["All analytics destinations are built on the same mechanism: every completed job's results"," ","are exported in kwery's ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["normalized result schema"]}," (the same fields documented per source"," ","under ",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"/sources#how-to-read-the-field-tables"},"children":["Sources"]},", one row per result, offers"," ","flattenable to one row per offer) and loaded into your system on the ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["same cadence your"," ","jobs run"]}," — a job completes, its results land. No polling, no ongoing action on your side."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"id":"warehouses","level":3,"__idx":5},"children":["Data warehouses "]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["BigQuery"]}," — we load into a dataset in your GCP project. You grant a kwery service"," ","account ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["roles/bigquery.dataEditor"]}," on that dataset; tables are per result type"," ","(",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["results"]},", ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["offers"]},", optionally ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["change_events"]}," and ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["crawl_provenance"]},"), partitioned by"," ","observation date and clustered by ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["source, country"]},". Schema mapping is agreed at setup"," ","and versioned — additive changes only, announced in advance."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Snowflake"]}," — delivery via an external stage (S3/GCS) plus managed ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["COPY INTO"]}," your"," ","schema, or a Snowflake share, depending on your access model. Same table layout as"," ","BigQuery."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["SQL databases (Postgres, MySQL, SQL Server)"]}," — for teams without a warehouse, a"," ","managed loader writes into tables in a database you host. You provide a connection with"," ","write access to a dedicated schema; upsert keys and retention are agreed at setup."]}]},{"$$mdtype":"Tag","name":"Heading","attributes":{"id":"bi-tools","level":3,"__idx":6},"children":["BI & analytics tools — Tableau, Power BI, Looker, Metabase "]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["BI tools don't connect to kwery directly — they connect to ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["where the pipeline lands your"," ","data"]}," (the warehouse or SQL database above), using each tool's native connector. That's a"," ","deliberate design: your dashboards run on your infrastructure at your warehouse's speed,"," ","joined against your own margin/catalog tables, with no kwery credentials inside the BI tool."," ","As part of Enterprise onboarding we hand over the table documentation and a set of starter"," ","queries (current cheapest offer per SKU, price-position vs. competitors, offer-count trends)"," ","that map 1:1 onto Tableau/Power BI/Looker data sources."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"id":"files","level":3,"__idx":7},"children":["File-based export (S3 / GCS) "]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["The ",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"#object-storage"},"children":["object storage"]}," destination doubles as the integration path for"," ","anything that ingests files: deliveries are written as ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["NDJSON"]}," (one result per line, the"," ","exact stream-delivery shape; CSV on request) under a date-partitioned prefix in your bucket,"," ","e.g. ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["s3://your-bucket/kwery/2026/08/20/{job_id}.ndjson"]},". Spark, Athena, DuckDB, or a plain"," ","cron loader can pick them up from there."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"id":"setup","level":3,"__idx":8},"children":["What the setup process looks like "]},{"$$mdtype":"Tag","name":"ol","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":["You tell us the target (BigQuery / Snowflake / SQL / files) and grant the scoped access"," ","described above — we never need more than write access to the agreed destination."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["We configure the pipeline against your schema preferences and backfill a sample so your"," ","team can validate the mapping."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["From then on it runs unattended; schema changes are additive and announced. Delivery"," ","health is monitored on our side like any other delivery channel."]}]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"next-steps","__idx":9},"children":["Next steps"]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"/guides/webhooks"},"children":["Webhooks"]}," — HMAC verification, retry schedule, replay."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"/guides/change-events"},"children":["Change events"]}," — event catalog and payload shapes."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"/guides/authentication"},"children":["Authentication"]}," — credentials and account setup."]}]}]},"headings":[{"value":"Destinations","id":"destinations","depth":1},{"value":"Webhooks","id":"webhooks","depth":2},{"value":"Object storage","id":"object-storage","depth":2},{"value":"Analytics & BI integrations — BigQuery, Snowflake, SQL, Tableau","id":"analytics","depth":2},{"value":"How the pipelines work","id":"pipeline","depth":3},{"value":"Data warehouses","id":"warehouses","depth":3},{"value":"BI & analytics tools — Tableau, Power BI, Looker, Metabase","id":"bi-tools","depth":3},{"value":"File-based export (S3 / GCS)","id":"files","depth":3},{"value":"What the setup process looks like","id":"setup","depth":3},{"value":"Next steps","id":"next-steps","depth":2}],"frontmatter":{"seo":{"title":"Webhook Destinations — kwery Docs","description":"Configure where kwery delivers webhook events and batch/stream results."}},"lastModified":"2026-09-14T12:09:30.000Z","pagePropGetterError":{"message":"","name":""}},"slug":"/guides/destinations","userData":{"isAuthenticated":false,"teams":["anonymous"]},"isPublic":true}