Cross-Provider Workflow

Geocode Enrichment to Airtable

Version 1.0.0

Geocode an address, verify it against a place index, then store it in Airtable.

1 workflow 3 source APIs 3 providers
View Spec View on GitHub ArazzoWorkflowsCross-Provider

Providers Orchestrated

positionstack amazon-location-service airtable

Workflows

geocode-verify-store
Geocode, verify against a place index, and store in Airtable.
Forward-geocodes an address with positionstack, verifies it against an Amazon Location place index, and creates an Airtable record with the verified location.
3 steps inputs: address, baseId, indexName, tableIdOrName outputs: label, recordId, verifyStatus
1
geocode-address
$sourceDescriptions.positionstackApi.forwardGeocode
Forward-geocode the supplied address into coordinates.
2
verify-place
$sourceDescriptions.amazonLocationApi.SearchPlaceIndexForText
Cross-check the geocoded address against the place index.
3
store-record
$sourceDescriptions.airtableApi.createRecords
Store the verified location into an Airtable record.

Source API Descriptions

Arazzo Workflow Specification

geo-positionstack-amazon-location-airtable-enrich.yml Raw ↑
arazzo: 1.0.1
info:
  title: Geocode Enrichment to Airtable
  summary: Geocode an address, verify it against a place index, then store it in Airtable.
  description: >-
    A geo enrichment workflow that forward-geocodes an address with positionstack,
    cross-checks it against an Amazon Location Service place index, and stores the
    verified location into an Airtable base. Demonstrates chaining two geospatial
    providers with a no-code database provider for high-confidence address capture.
  version: 1.0.0
sourceDescriptions:
  - name: positionstackApi
    url: https://raw.githubusercontent.com/api-evangelist/positionstack/refs/heads/main/openapi/positionstack-openapi.yml
    type: openapi
  - name: amazonLocationApi
    url: https://raw.githubusercontent.com/api-evangelist/amazon-location-service/refs/heads/main/openapi/amazon-location-service-openapi.yml
    type: openapi
  - name: airtableApi
    url: https://raw.githubusercontent.com/api-evangelist/airtable/refs/heads/main/openapi/airtable-airtable-api-openapi.yml
    type: openapi
workflows:
  - workflowId: geocode-verify-store
    summary: Geocode, verify against a place index, and store in Airtable.
    description: >-
      Forward-geocodes an address with positionstack, verifies it against an Amazon
      Location place index, and creates an Airtable record with the verified location.
    inputs:
      type: object
      properties:
        address:
          type: string
        indexName:
          type: string
        baseId:
          type: string
        tableIdOrName:
          type: string
    steps:
      - stepId: geocode-address
        description: Forward-geocode the supplied address into coordinates.
        operationId: $sourceDescriptions.positionstackApi.forwardGeocode
        parameters:
          - name: query
            in: query
            value: $inputs.address
        successCriteria:
          - condition: $statusCode == 200
        outputs:
          latitude: $response.body#/data/0/latitude
          longitude: $response.body#/data/0/longitude
          label: $response.body#/data/0/label
      - stepId: verify-place
        description: Cross-check the geocoded address against the place index.
        operationId: $sourceDescriptions.amazonLocationApi.SearchPlaceIndexForText
        parameters:
          - name: IndexName
            in: path
            value: $inputs.indexName
        requestBody:
          contentType: application/json
          payload:
            Text: $steps.geocode-address.outputs.label
            MaxResults: 1
        successCriteria:
          - condition: $statusCode == 200
        outputs:
          verifyStatus: $statusCode
      - stepId: store-record
        description: Store the verified location into an Airtable record.
        operationId: $sourceDescriptions.airtableApi.createRecords
        parameters:
          - name: baseId
            in: path
            value: $inputs.baseId
          - name: tableIdOrName
            in: path
            value: $inputs.tableIdOrName
        requestBody:
          contentType: application/json
          payload:
            records:
              - fields:
                  Label: $steps.geocode-address.outputs.label
                  Latitude: $steps.geocode-address.outputs.latitude
                  Longitude: $steps.geocode-address.outputs.longitude
        successCriteria:
          - condition: $statusCode == 200
        outputs:
          recordId: $response.body#/records/0/id
    outputs:
      label: $steps.geocode-address.outputs.label
      verifyStatus: $steps.verify-place.outputs.verifyStatus
      recordId: $steps.store-record.outputs.recordId