Why Automate Water Quality Data
Manual ZIP code lookups work fine for one-off checks. But if you're processing property listings, triaging insurance applications, or monitoring water quality across a portfolio of addresses, you need automation.
ZipCheckup's REST API returns structured JSON for any U.S. ZIP code — no API key required on the free tier. That makes it a perfect fit for no-code platforms like Zapier and Make (formerly Integromat), where you can wire up a trigger, call the API, and route the results to any destination in minutes.
Common automation scenarios:
- A new lead enters your CRM → enrich the record with water quality score and flood risk
- A property listing is added to your sheet → auto-fill environmental risk columns
- Weekly check on 50 ZIP codes → alert Slack if any score drops below a threshold
- Insurance application received → flag high-risk ZIPs before underwriting review
Setting Up a Zapier Zap
Step 1: Choose Your Trigger
Start a new Zap and pick the trigger that matches your data source:
| Trigger App | Example Event | When It Fires |
|---|---|---|
| Google Sheets | New Spreadsheet Row | A new property is added to your tracker |
| HubSpot | New Contact | A lead fills out a form with their ZIP |
| Webhooks by Zapier | Catch Hook | Your app sends a POST to Zapier's URL |
| Schedule | Every Week | Run a batch check on a fixed list of ZIPs |
The key requirement: your trigger must provide a ZIP code value. Map it to a variable you'll use in the next step.
Step 2: Add the ZipCheckup API Call
Add a Webhooks by Zapier action (not to be confused with the Webhooks trigger). Choose Custom Request and configure:
Method: GET
URL: https://zipcheckup.com/api/v1/zip/{{zip_code}}
Headers: Accept: application/json
Replace {{zip_code}} with the mapped field from your trigger (e.g., the ZIP column from Google Sheets).
Full Zapier HTTP configuration:
{
"method": "GET",
"url": "https://zipcheckup.com/api/v1/zip/{{steps.trigger.zip}}",
"headers": {
"Accept": "application/json"
}
}
The API returns a JSON object. Zapier will auto-parse the fields so you can use them in subsequent steps:
{
"zip": "90210",
"score": 72,
"grade": "B",
"violations": 3,
"lead_level": "low",
"radon_zone": 2,
"flood_claims": 148,
"components": {
"water_quality": 78,
"lead_risk": 85,
"radon_risk": 62,
"flood_risk": 55,
"air_quality": 71
}
}
Step 3: Route the Results
Add one or more action steps after the API call:
Google Sheets — Update a row:
Map the parsed JSON fields to columns in your spreadsheet:
Column D (Score): {{steps.webhooks.score}}
Column E (Grade): {{steps.webhooks.grade}}
Column F (Lead Level): {{steps.webhooks.lead_level}}
Column G (Flood Risk): {{steps.webhooks.components__flood_risk}}
Slack — Send a notification:
Channel: #property-alerts
Message: 🏠 ZIP {{steps.webhooks.zip}} scored {{steps.webhooks.grade}}
({{steps.webhooks.score}}/100).
Lead: {{steps.webhooks.lead_level}} |
Violations: {{steps.webhooks.violations}}
Email — Send a summary:
Use Email by Zapier or Gmail to send a formatted report to stakeholders or clients with the score, grade, and component breakdown.
Step 4: Add a Filter (Optional)
Insert a Filter step between the API call and the notification to only alert on concerning results:
Only continue if:
steps.webhooks.score (Number) Less than 50
OR
steps.webhooks.lead_level (Text) Exactly matches high
This way you only get notified about ZIPs that need attention.
Make (Integromat) Equivalent
Make uses a visual flow builder with modules. Here's the equivalent setup:
Module 1: Trigger
Use a Watch Rows module (Google Sheets), Watch Records (Airtable), or Webhook trigger depending on your data source.
Module 2: HTTP Request
Add an HTTP > Make a Request module:
URL: https://zipcheckup.com/api/v1/zip/{{1.zip_code}}
Method: GET
Parse response: Yes
Make will auto-detect the JSON structure and let you map individual fields in downstream modules.
Module 3: Router (Optional)
Add a Router to branch the flow:
- Branch 1: If
score < 50→ Send Slack message - Branch 2: Always → Update Google Sheets row
- Branch 3: If
lead_level = "high"→ Create task in Asana/Trello
Module 4: Action
Map the API response fields just like in Zapier. Make uses dot notation for nested fields:
{{2.data.score}}
{{2.data.grade}}
{{2.data.components.water_quality}}
{{2.data.components.flood_risk}}
Example Use Cases
Real Estate CRM Enrichment
A real estate platform adds ZipCheckup data to every new listing:
Trigger: New listing in MLS feed (webhook)
Action 1: GET /api/v1/zip/{listing_zip}
Action 2: Update CRM record with score, grade, flood_claims
Action 3: If grade = "D" or "F" → flag for agent review
The agent sees a water quality score right on the listing card — no manual lookup needed.
Insurance Underwriting Alerts
An insurance company pre-screens applications:
Trigger: New application submitted (webhook)
Action 1: GET /api/v1/zip/{applicant_zip}
Filter: flood_claims > 500 OR radon_zone = 1 OR score < 40
Action 2: Create Jira ticket for manual underwriting review
Action 3: Add risk flag to applicant record
Weekly Portfolio Monitor
A property management company tracks environmental risk across 200 properties:
Trigger: Schedule (every Monday at 8am)
Action 1: Get all ZIPs from Google Sheet column A
Action 2: Loop → GET /api/v1/zip/{zip} for each
Action 3: Compare to last week's scores (stored in column B)
Action 4: If score decreased by 10+ points → Slack alert
Action 5: Update sheet with current scores
Rate Limits and Tips
- Free tier: 100 requests/day, no API key needed
- Batch lookups: If you're checking 50+ ZIPs, space requests with a 1-second delay in Make's loop settings (Zapier handles this automatically)
- Caching: Store results in your sheet/database. Water quality scores update quarterly — you don't need to re-fetch daily
- Error handling: Add an error path in Make or a Zapier "Paths" step to handle 429 (rate limit) or 404 (invalid ZIP) responses gracefully
Pro Tip: Use Zapier's built-in "Looping by Zapier" action to batch-process multiple ZIPs from a single trigger. Pair it with a 1-second delay step to stay within rate limits.