ZapBounce and Snowflake
Snowflake supports external functions, which let a SQL query call an HTTP endpoint through API Gateway. It is tempting to use one for verification and it is usually the wrong shape.
External functions are row-oriented and Snowflake batches them in ways you do not control, which interacts badly with a rate-limited API.
External functions do not respect an external rate limit
Snowflake decides how to batch external function calls based on its own execution plan. A query over a million rows will issue calls at a pace tuned for Snowflake's throughput rather than the API's limit.
The result is a wall of 429s inside a query that then fails, having already consumed warehouse credits.
Staging the addresses, submitting a batch through a task, and loading the results back keeps both sides within their own constraints.
How the data moves
Stage candidates with a Snowflake task
A task selects unverified addresses into a stage table on a schedule.
Submit the batch from outside Snowflake
A small job reads the stage, submits the batch, and waits for the webhook. Snowflake is the storage, not the orchestrator.
Load results with COPY INTO
The results file lands in a stage and COPY INTO loads it, which is the cheap path.
Use a stream to find new rows
Snowflake streams track changes, so the candidate query reads only what arrived since the last run.
Setting it up
- Create a verdict table with address, verdict, check date and coverage.
- Create a stream on the source table to track new and changed addresses.
- Write a task that stages candidates from the stream on a schedule.
- Run an external job that submits the batch and receives the completion webhook.
- Land the results file in a Snowflake stage and load it with COPY INTO.
- Expose a view joining verdicts with a staleness condition built in.
Snowflake: common questions
Can I use an external function?
You can, and Snowflake will pace the calls by its own plan rather than our rate limit. A staged batch is the reliable shape.
How do I find new rows to check?
A stream on the source table. It tracks changes so the candidate query does not scan everything.
Where should the orchestration live?
Outside Snowflake. Tasks stage the work; a job submits the batch and receives the webhook.
Check a Snowflake export today
100 free checks a month, no card. Unknown results and duplicates are never billed.