Extract Real Estate Listings

Extract property addresses, prices, room counts, and features from listing documents into structured JSON for MLS and property platforms.

Who this is for

Real estate agencies and property platforms use this recipe to digitize listing documents. Upload a property listing PDF and receive structured JSON with address, price, and property features — ready for your MLS integration or property database.

curl -X POST https://api.iterationlayer.com/document-extraction/v1/extract \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "files": [
      {
        "type": "url",
        "name": "listing.pdf",
        "url": "https://example.com/listings/listing.pdf"
      }
    ],
    "schema": {
      "fields": [
        { "name": "address", "type": "ADDRESS", "description": "Full property address" },
        { "name": "listing_price", "type": "CURRENCY_AMOUNT", "description": "Listed sale price" },
        { "name": "bedrooms", "type": "INTEGER", "description": "Number of bedrooms" },
        { "name": "bathrooms", "type": "INTEGER", "description": "Number of bathrooms" },
        { "name": "square_footage", "type": "INTEGER", "description": "Total square footage" }
      ]
    }
  }'
import { IterationLayer } from "iterationlayer";
const client = new IterationLayer({ apiKey: "YOUR_API_KEY" });

const result = await client.extract({
  files: [
    {
      type: "url",
      name: "listing.pdf",
      url: "https://example.com/listings/listing.pdf",
    },
  ],
  schema: {
    fields: [
      { name: "address", type: "ADDRESS", description: "Full property address" },
      { name: "listing_price", type: "CURRENCY_AMOUNT", description: "Listed sale price" },
      { name: "bedrooms", type: "INTEGER", description: "Number of bedrooms" },
      { name: "bathrooms", type: "INTEGER", description: "Number of bathrooms" },
      { name: "square_footage", type: "INTEGER", description: "Total square footage" },
    ],
  },
});

console.log(result);
from iterationlayer import IterationLayer
client = IterationLayer(api_key="YOUR_API_KEY")

result = client.extract(
    files=[
        {
            "type": "url",
            "name": "listing.pdf",
            "url": "https://example.com/listings/listing.pdf",
        }
    ],
    schema={
        "fields": [
            {"name": "address", "type": "ADDRESS", "description": "Full property address"},
            {"name": "listing_price", "type": "CURRENCY_AMOUNT", "description": "Listed sale price"},
            {"name": "bedrooms", "type": "INTEGER", "description": "Number of bedrooms"},
            {"name": "bathrooms", "type": "INTEGER", "description": "Number of bathrooms"},
            {"name": "square_footage", "type": "INTEGER", "description": "Total square footage"},
        ]
    },
)

print(result)
package main

import (
    "fmt"
    il "github.com/iterationlayer/sdk-go"
)

func main() {
    client := il.NewClient("YOUR_API_KEY")

    result, err := client.Extract(il.ExtractRequest{
        Files: []il.FileInput{
            il.NewFileFromURL("listing.pdf", "https://example.com/listings/listing.pdf"),
        },
        Schema: il.ExtractionSchema{
            "address":        il.NewAddressFieldConfig("address", "Full property address"),
            "listing_price":  il.NewCurrencyAmountFieldConfig("listing_price", "Listed sale price"),
            "bedrooms":       il.NewIntegerFieldConfig("bedrooms", "Number of bedrooms"),
            "bathrooms":      il.NewIntegerFieldConfig("bathrooms", "Number of bathrooms"),
            "square_footage": il.NewIntegerFieldConfig("square_footage", "Total square footage"),
        },
    })
    if err != nil {
        panic(err)
    }

    fmt.Println(result)
}

Related Recipes

Start building in minutes

Free trial credits included. No credit card required.