NZ address workflow tools for developers

Free NZ address autocomplete, delivery checks, service areas, and routing.

StreetKit helps teams add New Zealand address autocomplete, delivery checks, service-area rules, and distance or travel-time estimates to everyday web workflows.

It is free to use, subject to fair-use limits, so developers can try the tools without login while still keeping shared public access sustainable.

Forms
Help users choose cleaner structured NZ addresses.
Delivery checks
Evaluate simple local rules before promising service.
Service areas
Model coverage with radius or road-aware drive zones.
Routing
Estimate distance and travel time for booking, quoting, or service checks.

Quick demo

Preview the four StreetKit features

Switch between Address Autocomplete, Radius, Drive Zones, and Live Routing here, or jump to the full demo suite for the complete workflows.

Address Autocomplete

Autocomplete a New Zealand address

Type a partial address and choose a structured suggestion for forms or checkout.

Go to full demo

Type at least 3 characters to search addresses.

Address autocomplete

Live

Selected address output can feed delivery, CRM, and service workflows.

Output
Structured address
Use case
Checkout form
Workflow
Cleaner form data
Full demo
Address Autocomplete section

Built for practical NZ workflows

Solutions

Start with the job your product needs to do.

Choose the workflow first, then add the StreetKit feature that maps to it. Each option links to a focused page with the right next step.

Address Autocomplete

Help people choose the right NZ address.

Add address suggestions to forms and checkouts so downstream delivery, CRM, and service workflows start with cleaner data.

Address docs

Benefits

  • Reduces messy checkout or form entries.
  • Helps users pick a structured New Zealand address.
  • Supports delivery, CRM, and service workflows with cleaner address data.

Realistic use case

Pania's Pet Supplies

Pania's Pet Supplies uses Address Autocomplete so customers can pick the correct NZ delivery address before checkout creates a messy order.

Free to use with fair-use limits. Read rate limits.

Demo

Live address search

Type at least three characters, then select a live StreetKit suggestion to see the structured output shape.

Type to search StreetKit addresses.

Selected address

Waiting for a selection

Preview

Select a live address to preview the selected-address payload.

Line 1
Unknown
Suburb
Unknown
City
Unknown
Source
Live index
Lat/lon
Unknown

Copy-paste starter

Use the browser widget directly, or wrap it in the framework your site already uses.

HTML

<link rel="stylesheet" href="https://streetkit.smp.kiwi/widget/streetkit.css" />
<input id="delivery-address" autocomplete="off" />
<script src="https://streetkit.smp.kiwi/widget/streetkit.js"></script>
<script>
  StreetKit.init({
    input: "#delivery-address",
    publicMode: true,
    indexBaseUrl: "https://index.streetkit.smp.kiwi/public/v1",
    onSelect(address) {
      console.log(address.label, address.components);
    }
  });
</script>

React

import { useEffect, useRef } from "react";

export function DeliveryAddress() {
  const inputRef = useRef(null);

  useEffect(() => {
    const widget = window.StreetKit?.init({
      input: inputRef.current,
      publicMode: true,
      indexBaseUrl: "https://index.streetkit.smp.kiwi/public/v1",
      onSelect(address) {
        console.log(address.label, address.components);
      }
    });

    return () => widget?.destroy?.();
  }, []);

  return <input ref={inputRef} autoComplete="off" placeholder="Delivery address" />;
}

Vue

<template>
  <input ref="input" autocomplete="off" placeholder="Delivery address" />
</template>

<script setup>
import { onMounted, onUnmounted, ref } from "vue";

const input = ref(null);
let widget;

onMounted(() => {
  widget = window.StreetKit?.init({
    input: input.value,
    publicMode: true,
    indexBaseUrl: "https://index.streetkit.smp.kiwi/public/v1",
    onSelect(address) {
      console.log(address.label, address.components);
    }
  });
});

onUnmounted(() => widget?.destroy?.());
</script>

Webflow

<!-- Add this in a Webflow Embed near your address field. -->
<link rel="stylesheet" href="https://streetkit.smp.kiwi/widget/streetkit.css" />
<input id="delivery-address" autocomplete="off" />
<script src="https://streetkit.smp.kiwi/widget/streetkit.js"></script>
<script>
  window.Webflow ||= [];
  window.Webflow.push(() => {
    StreetKit.init({
      input: "#delivery-address",
      publicMode: true,
      indexBaseUrl: "https://index.streetkit.smp.kiwi/public/v1",
      onSelect(address) {
        console.log(address.label, address.components);
      }
    });
  });
</script>

Radius

Check a simple distance rule from a known point.

Radius is useful when a straight-line distance threshold is enough for a delivery, service, or civic coverage rule.

Radius docs

Benefits

  • Checks whether an address is inside a radius from a known point.
  • Helps avoid promising free delivery or service when a customer is too far away.
  • Fits ecommerce, local suppliers, trades, field-service, and civic teams.

Realistic use case

Frank's Building Supplies

Frank's Building Supplies offers free delivery within 15 km of the warehouse. Radius checks the selected customer address before checkout promises free delivery.

Free to use with fair-use limits. Read rate limits.

Demo

15 km live address rule

Select an origin and destination from the live address index. Radius uses estimated straight-line distance from the selected address coordinates.

Select both addresses to calculate the radius result.

Waiting for two addresses

Waiting

Choose an origin and destination from live StreetKit suggestions.

Distance
Not selected
Rule
15 km free delivery
Calculation
Estimated straight-line
Decision
Waiting

Copy-paste starter

Add a simple distance rule around a known shop, depot, or service base.

HTML

<link rel="stylesheet" href="https://streetkit.smp.kiwi/widget/streetkit.css" />
<input id="delivery-address" autocomplete="off" />
<p id="delivery-message"></p>
<script src="https://streetkit.smp.kiwi/widget/streetkit.js"></script>
<script>
  StreetKit.init({
    input: "#delivery-address",
    publicMode: true,
    indexBaseUrl: "https://index.streetkit.smp.kiwi/public/v1",
    radiusRules: {
      mode: "straight_line",
      origins: [
        {
          id: "warehouse",
          label: "Warehouse",
          lat: -36.9001,
          lon: 174.8852
        }
      ],
      rules: [
        {
          id: "free-delivery",
          label: "Free delivery within 15 km",
          radiusKm: 15,
          message: "Free delivery available."
        }
      ]
    },
    onSelect(address, context) {
      const match = context.radius?.matchedRules?.[0];
      document.querySelector("#delivery-message").textContent =
        match?.message ?? "Delivery quote required.";
    }
  });
</script>

React

import { useEffect, useRef, useState } from "react";

const radiusRules = {
  mode: "straight_line",
  origins: [{ id: "warehouse", label: "Warehouse", lat: -36.9001, lon: 174.8852 }],
  rules: [{ id: "free-delivery", label: "Free delivery within 15 km", radiusKm: 15 }]
};

export function DeliveryRadiusCheck() {
  const inputRef = useRef(null);
  const [message, setMessage] = useState("");

  useEffect(() => {
    const widget = window.StreetKit?.init({
      input: inputRef.current,
      publicMode: true,
      indexBaseUrl: "https://index.streetkit.smp.kiwi/public/v1",
      radiusRules,
      onSelect(_address, context) {
        setMessage(context.radius?.matchedRules?.[0]?.label ?? "Delivery quote required.");
      }
    });

    return () => widget?.destroy?.();
  }, []);

  return (
    <>
      <input ref={inputRef} autoComplete="off" placeholder="Delivery address" />
      <p>{message}</p>
    </>
  );
}

Vue

<template>
  <input ref="input" autocomplete="off" placeholder="Delivery address" />
  <p>{{ message }}</p>
</template>

<script setup>
import { onMounted, onUnmounted, ref } from "vue";

const input = ref(null);
const message = ref("");
let widget;

const radiusRules = {
  mode: "straight_line",
  origins: [{ id: "warehouse", label: "Warehouse", lat: -36.9001, lon: 174.8852 }],
  rules: [{ id: "free-delivery", label: "Free delivery within 15 km", radiusKm: 15 }]
};

onMounted(() => {
  widget = window.StreetKit?.init({
    input: input.value,
    publicMode: true,
    indexBaseUrl: "https://index.streetkit.smp.kiwi/public/v1",
    radiusRules,
    onSelect(_address, context) {
      message.value = context.radius?.matchedRules?.[0]?.label ?? "Delivery quote required.";
    }
  });
});

onUnmounted(() => widget?.destroy?.());
</script>

Webflow

<!-- Add this in a Webflow Embed near your delivery form. -->
<link rel="stylesheet" href="https://streetkit.smp.kiwi/widget/streetkit.css" />
<input id="delivery-address" autocomplete="off" />
<p id="delivery-message"></p>
<script src="https://streetkit.smp.kiwi/widget/streetkit.js"></script>
<script>
  window.Webflow ||= [];
  window.Webflow.push(() => {
    StreetKit.init({
      input: "#delivery-address",
      publicMode: true,
      indexBaseUrl: "https://index.streetkit.smp.kiwi/public/v1",
      radiusRules: {
        mode: "straight_line",
        origins: [{ id: "warehouse", label: "Warehouse", lat: -36.9001, lon: 174.8852 }],
        rules: [{ id: "free-delivery", label: "Free delivery within 15 km", radiusKm: 15 }]
      },
      onSelect(_address, context) {
        const match = context.radius?.matchedRules?.[0];
        document.querySelector("#delivery-message").textContent =
          match?.label ?? "Delivery quote required.";
      }
    });
  });
</script>

Drive Zones

Use road-aware coverage instead of a simple circle.

Managed service-area setup for teams with fixed depots, branches, clinics, offices, or service bases. Drive Zones are built with sensible coverage limits so road-aware checks stay fast and practical.

Talk to us about Drive Zones

Benefits

  • Models real delivery or field-service coverage better than a circle.
  • Lets teams express service rules in minutes of drive time.
  • Works best for repeated checks from known branches, depots, or service bases.

Realistic use case

Frank's Building Supplies

Frank's Building Supplies also wants a practical road-travel rule: free delivery if the address is inside a 20-minute drive zone from the warehouse.

Managed setup

Designed with sensible limits

Drive Zones need a short setup conversation so we can agree the origins, drive-time thresholds, region, update frequency, and checkout or reporting needs before enabling them.

When to use Live Routing instead

Use routing for arbitrary address pairs

If your product compares any two addresses, such as a booking form checking whether same-day service is realistic, Live Routing is the more flexible fit. Drive Zones are strongest for fixed-origin service eligibility.

Drive Zones are scoped before use so limits stay sensible. Contact us to discuss a setup.

Demo

Fixed-origin Drive Zones preview

19 Ormiston Road is the managed origin. Choose a destination address to preview how a bounded service-area rule can classify delivery or field-service coverage.

Managed origin for this demo 19 Ormiston Road, Ōtara, Auckland Fixed origin for the 20 minute coverage preview.

Choose a destination to preview the road-aware coverage rule.

Choose a destination

Waiting

19 Ormiston Road is fixed as the managed origin for this demo.

Drive time
Not checked
Distance
Not checked
Setup
Managed coverage
Decision
Waiting

Managed feature

Talk to us before using Drive Zones

We will help scope the origins, coverage limits, performance target, and update pattern so the result is useful without becoming too broad or heavy for the job.

  • Best for fixed depots, branches, clinics, offices, and service bases.
  • Scoped by region, drive time, number of origins, and update needs.
  • Use Live Routing instead for flexible address-to-address estimates.

Live Routing

Estimate travel time before quoting or booking work.

Live Routing helps teams compare estimated travel time and distance for online booking, quoting, delivery, and field-service workflows.

Live Routing docs

Benefits

  • Helps booking and quote flows estimate likely travel time.
  • Supports delivery, technician, and field-service workflows in web apps.
  • Provides practical ETA and distance estimates without overclaiming live traffic precision.

Realistic use case

On-site service booking

A plumbing or appliance-repair website estimates travel time to the customer's address before showing same-day service options or asking the customer to request a quote.

Free to use with fair-use limits. Read rate limits.

Coming soon

Live Routing demo unavailable

Live Routing is unavailable in the public demo while we finish the service. It is coming soon for teams that need address-to-address distance and travel-time estimates.

Live Routing is unavailable in the public demo, but it is coming soon.

Live Routing unavailable

Coming soon

We are preparing Live Routing for booking, quoting, delivery, and field-service workflows.

Distance
Coming soon
Duration
Coming soon
Estimate type
Live Routing
Decision hint
Contact us for early access

Works with the web

Add StreetKit without rebuilding your stack.

Start with the browser widget, then wrap it for the platform you already use. HTML and JavaScript are available now; Webflow, React, and Vue have guide paths; WooCommerce is available only as a beta plugin preview for controlled checkout testing. Shopify Plus checkout is a private prototype scaffold only, not public support or a generic checkout script-tag install. Compare integration options.

HTML / JS available
Webflow guide
React guide
Vue guide
WooCommerce beta preview
Shopify Plus prototype only
And more More planned
planned

Registered access

Ready to use StreetKit on a real site?

Request a site ID when a production form, checkout, booking flow, or internal tool needs better soft limits and a clear integration label.

Request a site ID

Support StreetKit

Support options that match real use.

StreetKit is useful because it saves time on real forms, checkouts, service-area checks, and routing workflows. These options are sized around the kinds of people and teams likely to rely on it.

Community

Free

Try StreetKit, build demos, and use the public tools within fair-use limits.

Developer Supporter

$15/month

For solo builders, freelancers, and developers using StreetKit on small projects.

Forms Supporter

$39/month

For small sites, checkouts, booking forms, and civic tools using address search regularly.

Workflow Supporter

$99/month

For teams using Radius, Drive Zones, or selected-address data in everyday operations.

Agency Sponsor

$249/month

For agencies and product teams using StreetKit across multiple client or internal projects.

Infrastructure Sponsor

$750+/month

For organisations backing ongoing NZ address data refreshes, quality work, docs, and demos.

Sponsorship helps keep StreetKit available. It does not remove fair-use limits or create a private support contract unless agreed separately.