{
  "name": "HasData - Zillow listings to Airtable (test candidate)",
  "flow": [
    {
      "id": 1,
      "module": "hasdata:zillowListing",
      "version": 1,
      "parameters": {},
      "mapper": {
        "keyword": "New York, NY",
        "type": "forSale",
        "sort": "newest",
        "page": 1
      },
      "metadata": {
        "designer": {
          "x": 0,
          "y": 0
        },
        "parameters": [
          {
            "name": "__IMTCONN__",
            "type": "account:hasdata",
            "label": "Connection",
            "required": true
          }
        ],
        "expect": [
          {
            "name": "keyword",
            "type": "text",
            "label": "Location",
            "required": true
          },
          {
            "name": "type",
            "type": "select",
            "label": "Listing Type",
            "required": true,
            "validate": {
              "enum": [
                "forSale",
                "forRent",
                "sold"
              ]
            }
          },
          {
            "name": "sort",
            "type": "select",
            "label": "Sort By",
            "validate": {
              "enum": [
                "verifiedSource",
                "homesForYou",
                "priceHighToLow",
                "priceLowToHigh",
                "paymentHighToLow",
                "paymentLowToHigh",
                "newest",
                "bedrooms",
                "bathrooms",
                "squareFeet",
                "lotSize"
              ]
            }
          },
          {
            "name": "price_min",
            "type": "number",
            "label": "Price Min"
          },
          {
            "name": "price_max",
            "type": "number",
            "label": "Price Max"
          },
          {
            "name": "beds_min",
            "type": "number",
            "label": "Beds Min"
          },
          {
            "name": "beds_max",
            "type": "number",
            "label": "Beds Max"
          },
          {
            "name": "baths_min",
            "type": "number",
            "label": "Baths Min"
          },
          {
            "name": "baths_max",
            "type": "number",
            "label": "Baths Max"
          },
          {
            "name": "yearBuilt_min",
            "type": "number",
            "label": "Year Built Min"
          },
          {
            "name": "yearBuilt_max",
            "type": "number",
            "label": "Year Built Max"
          },
          {
            "name": "lotSize_min",
            "type": "number",
            "label": "Lot Size Min"
          },
          {
            "name": "lotSize_max",
            "type": "number",
            "label": "Lot Size Max"
          },
          {
            "name": "squareFeet_min",
            "type": "number",
            "label": "Square Feet Min"
          },
          {
            "name": "squareFeet_max",
            "type": "number",
            "label": "Square Feet Max"
          },
          {
            "name": "homeTypes",
            "type": "select",
            "label": "Home Types",
            "multiple": true,
            "validate": {
              "enum": [
                "house",
                "townhome",
                "multiFamily",
                "condo",
                "lot",
                "apartment",
                "manufactured"
              ]
            }
          },
          {
            "name": "listingType",
            "type": "select",
            "label": "Listing Category",
            "validate": {
              "enum": [
                "byAgent",
                "byOwner"
              ]
            }
          },
          {
            "name": "listingPublishOptions",
            "type": "select",
            "label": "Listing Publish Options",
            "multiple": true,
            "validate": {
              "enum": [
                "ownerPosted",
                "agentListed",
                "newConstruction",
                "foreclosures",
                "auctions",
                "foreclosed",
                "preForeclosures"
              ]
            }
          },
          {
            "name": "hoa",
            "type": "number",
            "label": "HOA"
          },
          {
            "name": "propertyStatus",
            "type": "select",
            "label": "Property Status",
            "multiple": true,
            "validate": {
              "enum": [
                "comingSoon",
                "acceptingBackupOffers",
                "pendingAndUnderContract"
              ]
            }
          },
          {
            "name": "tours",
            "type": "select",
            "label": "Tours",
            "multiple": true,
            "validate": {
              "enum": [
                "open",
                "3d"
              ]
            }
          },
          {
            "name": "otherAmenities",
            "type": "select",
            "label": "Other Amenities",
            "multiple": true,
            "validate": {
              "enum": [
                "ac",
                "pool",
                "waterfront",
                "onsiteParking",
                "inUnitLaundry",
                "acceptZillowApplications",
                "incomeRestricted",
                "apartmentCommunity"
              ]
            }
          },
          {
            "name": "views",
            "type": "select",
            "label": "Views",
            "multiple": true,
            "validate": {
              "enum": [
                "city",
                "mountain",
                "park",
                "water"
              ]
            }
          },
          {
            "name": "pets",
            "type": "select",
            "multiple": true,
            "validate": {
              "enum": [
                "allowsLargeDogs",
                "allowsSmallDogs",
                "allowsCats"
              ]
            }
          },
          {
            "name": "basement",
            "type": "select",
            "label": "Basement",
            "multiple": true,
            "validate": {
              "enum": [
                "finished",
                "unfinished"
              ]
            }
          },
          {
            "name": "singleStoryOnly",
            "type": "boolean",
            "label": "Single Story Only"
          },
          {
            "name": "hide55plusCommunities",
            "type": "boolean",
            "label": "Hide 55+ Communities"
          },
          {
            "name": "daysOnZillow",
            "type": "select",
            "label": "Days on Zillow",
            "validate": {
              "enum": [
                1,
                7,
                14,
                30,
                90,
                "6m",
                "12m",
                "24m",
                "36m"
              ]
            }
          },
          {
            "name": "moveInDate",
            "type": "text",
            "label": "Move In Date"
          },
          {
            "name": "mustHaveGarage",
            "type": "boolean",
            "label": "Must Have Garage"
          },
          {
            "name": "parkingSpotsMin",
            "type": "number",
            "label": "Parking Spots Min"
          },
          {
            "name": "keywords",
            "type": "text",
            "label": "Additional Keywords"
          },
          {
            "name": "page",
            "type": "number",
            "label": "Page Number"
          }
        ]
      }
    },
    {
      "id": 2,
      "module": "builtin:BasicFeeder",
      "version": 1,
      "parameters": {},
      "mapper": {
        "array": "{{slice(distinct(ifempty(1.properties; emptyarray); \"id\"); 0; 2)}}"
      },
      "metadata": {
        "designer": {
          "x": 300,
          "y": 0,
          "name": "At most two distinct listings"
        }
      }
    },
    {
      "id": 3,
      "module": "json:TransformToJSON",
      "version": 1,
      "parameters": {
        "space": ""
      },
      "filter": {
        "name": "Property ID is present",
        "conditions": [
          [
            {
              "a": "{{length(trim(toString(ifempty(2.id; emptystring))))}}",
              "o": "number:greater",
              "b": "0"
            }
          ]
        ]
      },
      "mapper": {
        "object": "{{set(set(set(toCollection(emptyarray; \"key\"; \"value\"); \"performUpsert\"; set(toCollection(emptyarray; \"key\"; \"value\"); \"fieldsToMergeOn\"; split(\"Property ID\"; \"|\"))); \"typecast\"; false); \"records\"; add(emptyarray; set(toCollection(emptyarray; \"key\"; \"value\"); \"fields\"; set(set(set(set(set(set(set(set(set(toCollection(emptyarray; \"key\"; \"value\"); \"Property ID\"; toString(2.id)); \"Price\"; ifempty(2.price; null)); \"Currency\"; ifempty(2.currency; emptystring)); \"Beds\"; ifempty(2.beds; null)); \"Baths\"; ifempty(2.baths; null)); \"Address\"; ifempty(2.addressRaw; emptystring)); \"ZIP\"; toString(ifempty(2.address.zipcode; emptystring))); \"Broker\"; ifempty(2.brokerName; ifempty(2.brokerNameRaw; emptystring))); \"Listing URL\"; ifempty(2.url; emptystring)))))}}"
      },
      "metadata": {
        "designer": {
          "x": 600,
          "y": 0,
          "name": "Serialize Airtable upsert safely"
        },
        "parameters": [
          {
            "name": "space",
            "type": "select",
            "label": "Indentation",
            "validate": {
              "enum": [
                "tab",
                "2",
                "4"
              ]
            }
          }
        ],
        "expect": [
          {
            "name": "object",
            "type": "any",
            "label": "Object"
          }
        ]
      }
    },
    {
      "id": 4,
      "module": "airtable:makeApiCall",
      "version": 3,
      "parameters": {},
      "mapper": {
        "url": "",
        "method": "PATCH",
        "headers": [
          {
            "key": "Content-Type",
            "value": "application/json"
          }
        ],
        "qs": [],
        "body": "{{3.json}}"
      },
      "metadata": {
        "designer": {
          "x": 900,
          "y": 0,
          "name": "Upsert by Property ID — set recipient URL"
        },
        "parameters": [
          {
            "name": "__IMTCONN__",
            "type": "account:airtable3,airtable2",
            "label": "Connection",
            "required": true
          }
        ],
        "expect": [
          {
            "name": "url",
            "type": "text",
            "label": "URL",
            "required": true
          },
          {
            "name": "method",
            "type": "select",
            "label": "Method",
            "required": true,
            "validate": {
              "enum": [
                "GET",
                "POST",
                "PUT",
                "PATCH",
                "DELETE"
              ]
            }
          },
          {
            "name": "headers",
            "type": "array",
            "label": "Headers",
            "spec": [
              {
                "name": "key",
                "type": "text",
                "label": "Key"
              },
              {
                "name": "value",
                "type": "text",
                "label": "Value"
              }
            ]
          },
          {
            "name": "qs",
            "type": "array",
            "label": "Query String",
            "spec": [
              {
                "name": "key",
                "type": "text",
                "label": "Key"
              },
              {
                "name": "value",
                "type": "text",
                "label": "Value"
              }
            ]
          },
          {
            "name": "body",
            "type": "any",
            "label": "Body"
          }
        ]
      }
    }
  ],
  "metadata": {
    "instant": false,
    "version": 1,
    "scenario": {
      "roundtrips": 1,
      "maxErrors": 3,
      "autoCommit": true,
      "autoCommitTriggerLast": true,
      "sequential": true,
      "slots": null,
      "confidential": false,
      "dataloss": false,
      "dlq": false,
      "freshVariables": false
    },
    "designer": {
      "orphans": []
    },
    "notes": []
  }
}
