Object storage

Send events to Azure Blob Storage

Batched NDJSON event delivery into a customer-owned Azure Storage container, parity with S3 and GCS.

What is Azure Blob Storage?

Azure Blob Storage is Microsoft Azure's object storage service, the third leg of the S3/GCS/Azure trio. As a destination, it gives Azure-first customers the same durable, queryable raw-events archive in their own Azure subscription, billed to them and governed by their Azure AD identities. Pushrail's adapter writes the same NDJSON batch shape as S3 and GCS so multi-cloud customers see consistent layouts.

Why deliver events to Azure Blob Storage

  • Customer's data, customer's tenant, lands in their Azure subscription, governed by their RBAC.
  • Plays nicely with Azure Synapse, Fabric, and Databricks on Azure.
  • Parity with S3 and GCS for multi-cloud customers.
  • Cheap durability, Azure Blob cool/archive tiers can keep years of events for pennies.

How Pushrail delivers events to Azure Blob Storage

The Azure Blob adapter writes batched NDJSON blobs into the customer's container, with the same `event_type=…/dt=…/hour=…/part-<sha>.ndjson` path shape used by S3 and GCS. Batches flush on size threshold or time window. Blob names are deterministic so replays don't duplicate.

Auth and credentials

Customers authorize Pushrail with a SAS token scoped to write-only on a specific container (recommended, granular, time-bounded), or with a storage account key (broader, but simpler for early-stage setups). Tokens and keys are stored encrypted at rest. Rotations are dashboard-driven, old credentials drain in-flight batches, new ones take over on the next flush.

Batching, retries, and replay

Default 1 MB / 1,000-event batches with a 60-second flush window. Transient errors (5xx, throttling) retry with exponential backoff; auth or 404 errors fail to the DLQ for the customer to fix. Replay rewrites the same deterministic blob names, Synapse external tables and Databricks Auto Loader treat re-runs as a no-op.

Example payload

Pushrail accepts the canonical event shape on POST /v1/events. Below is the ingestion request your service makes.

{
  "eventType": "order.completed",
  "occurredAt": "2026-05-26T14:21:08.493Z",
  "source": "billing-service",
  "customerExternalId": "acct_8K2zRq",
  "idempotencyKey": "order_38a91f-completed",
  "correlationId": "req_4f30b2",
  "payload": {
    "orderId": "ord_38a91f",
    "amount": 12900,
    "currency": "USD",
    "items": [
      { "sku": "PR-PRO-MONTHLY", "qty": 1, "price": 12900 }
    ]
  },
  "metadata": {
    "tier": "pro",
    "region": "us-east-1"
  }
}

Example configuration

The fields your customer fills in to point Pushrail at their Azure Blob Storage setup.

{
  "type": "AZURE_BLOB",
  "name": "Customer Azure archive",
  "accountName": "acmestorageprod",
  "container": "pushrail-events",
  "prefix": "raw/pushrail/",
  "auth": {
    "mode": "SAS_TOKEN",
    "sasToken": "?sv=2024-11-04&ss=b&srt=co&sp=rwdlactf&se=2027-01-01T00%3A00%3A00Z&sig=…"
  },
  "batchSizeMb": 1,
  "flushIntervalSec": 60
}

Common use cases

  • Deliver raw events into a customer's Azure landing zone for Synapse or Fabric ingestion.
  • Compliance archive in Azure regions to meet data-residency requirements.
  • Feed a customer's Databricks-on-Azure pipeline without operating Event Hubs.
  • Mirror the layout the customer already uses in S3 or GCS for multi-cloud parity.

Frequently asked questions

Does Azure Blob delivery match the S3 and GCS adapters?

Yes. The Azure Blob adapter writes the same NDJSON batch shape and the same event_type=…/dt=…/hour=…/part-<sha>.ndjson path layout used by S3 and GCS, so multi-cloud customers see consistent layouts across all three.

Whose Azure subscription and credentials are used?

The customer's. Data lands in their Azure subscription, governed by their RBAC. They authorize Pushrail with a SAS token scoped to write-only on a specific container (recommended) or a storage account key. Tokens and keys are stored encrypted at rest and rotated from the dashboard.

What downstream Azure tools can read the data?

Azure Synapse, Fabric, and Databricks on Azure all read the blobs natively. Because blob names are deterministic, Synapse external tables and Databricks Auto Loader treat replayed re-runs as a no-op.

What happens if a delivery fails?

Transient errors (5xx, throttling) retry with exponential backoff; auth or 404 errors fail to the dead-letter queue for the customer to fix. Every attempt is recorded in the delivery logs. Replay rewrites the same deterministic blob names, so re-runs do not duplicate data.

Send events to Azure Blob Storage

Sandbox is open. No credit card.