Dynamic Ads for Real Estate

Automatically promote your home listings on Facebook. Leverage cross-device intent signals to automatically promote relevant listings from your inventory with a unique creative on Facebook.

High-Level Steps

  1. Set up your Home Listing Catalog
  2. Build your Audience for Real Estate
  3. Create and deliver ads for your home listings
  4. Get delivery information to see how people on Facebook are engaging in you ads, see Ads Insights
  5. Use debugging tools to diagnose and resolve problems. See Dynamic Ads Debugging Tools.

Catalog Setup

You need an appropriate real estate catalog that lists items to advertise such as apartments, condos, houses, lands, and so on. Each item has information to create customized ads. You can constantly update catalogs through various options. If you use batch uploads, you can also use a partial upload option, which enables you to create or update items that changed, see Batch Upload. This is available for all Dynamic Ads.

To set up catalogs, see:

Step 1: Create Listing Catalog

This contains a list of properties that you want to advertise. See Product Catalog Reference.

To create a home listing catalog, set vertical to home_listings:

curl \
    -F 'name=Home Listing Catalog Name' \
    -F 'vertical=home_listings' \
    -F 'access_token=<ACCESS TOKEN>' \
    https://graph.facebook.com/<API_VERSION>/<BUSINESS ID>/product_catalogs

To use the product catalog API, you need Marketing API Access Level and accept the Terms of Service by creating your first catalog through Business Manager.

Step 2: Setup Listing and Prices

This contains information for properties such as listing id, name, availability, description, address, bedrooms, bathrooms, and so on.

Listing Feed

This is a set of listings uploaded or fetched from your business. A listing item is a single property presented in your website or app. You can have a single feed for all properties in your catalog, or you can have multiple feeds where one feed represents properties in a single country, for a single real estate agency, or for one broker.

You must provide the listing feed in one of these formats:

File FormatDescriptionSample File

XML

Typically generated by automated feed provider systems. A root <listings> XML node encloses a set of <listing> nodes, each representing a home listing. The file must begin with a valid <?xml declaration tag.

Download

CSV, TSV

The first row must list the chosen field names in the order the values will be given. Subsequent rows then supply the corresponding values for each home listing. Nested or multi-value fields such as image can be represented using JSON-encoded values or by a set of "flattened" plain-text columns labeled using JSON-path syntax, such as image[0].url, image[0].tag[0], image[0].tag[1].

Download (CSV)

Our feed parser automatically detects UTF8, UTF16 or UTF32 text-encodings, falling back to LATIN1 if unexpected byte sequences appear. While text in field values can be given in any language, field names must be given exactly as below, in English.

Field Name and TypeDescription

home_listing_id

type: string

Required.

Unique apartment/home/condo level id - most granular id possible.

name

type: string

Required.

Name of listing

description

type: string

Description

image

type: object

Required.

Max items: 20

See Image Object Parameters

num_beds

type: float

Number of beds

num_baths

type: float

Number of baths

property_type

type: string

Type of property, Allowed values are: apartment, condo, house, land, manufactured, other, townhouse.

listing_type

type: string

Type of listing. Allowed values are: for_rent_by_agent, for_rent_by_owner, for_sale_by_agent, for_sale_by_owner, foreclosed, new_construction, new_listing.

num_units

type: int

For apartments, condos for rental, list the number of units available.

address

type: object

Required.

A complete address for the listing that must be resolvable to its location。

See Address Object Parameters

neighborhood

type: string

Required.

Listing neighborhood. Can have multiple. Max 20 items.

latitude

type: float

Required.

The latitude of the listing.

Example: 37.484100

longitude

type: float

Required.

The longitude of the listing.

Example: -122.148252

price

type: string

Required.

Sale or Rental price with ISO 4217 currency code.

availability

type: string

Required.

Whether or not the listing is available. Allowed values are: for_sale, for_rent, sale_pending, recently_sold, off_market, available_soon.

available_dates_price_config

type: object

List of dates and prices that a listing is available. When you provide values, Facebook can recommend listings based on their available dates and dynamically show the associated price in your ad.

See Available Dates Object Parameters

url

type: string

Required.

Link to listing page.

applink

type: object

App link to listing.

Image Object Parameters

Field Name and TypeDescription

url

type: string

Required.

Image source url. If you want to use carousel ads, provide a square 1:1 aspect ratio images of at least 600x600px. To show single image ads use images with a 1.91:1 aspect ratio image of at least 1200x630px.

tag

type: string

A string that represents what's in the image. There can be multiple tags associated with an image.

Examples:

  • Fitness Center
  • Swimming Pool

Optional. INSTAGRAM_STANDARD_PREFERRED - Allows advertisers to tag a specific image in their feed as the default image that will be used for Instagram. This tag is case sensitive.

Address Object Parameters

Field Name and TypeDescription

addr1

type: string

Required.

Street address of hotel.

Example: 675 El Camino Real

city

type: string

Required.

City where hotel is located.

Example: Palo Alto

region

type: string

Required.

State, county, region or province for hotel.

Example: California

country

type: string

Required.

Country of the hotel.

Example: United States

postal_code

type: string

Postal or zip-code of the hotel. Required unless country does not have a postal-code system.

Examples:

  • 94125
  • NW1 3FG

Available Dates Price Config

With available_dates_price_config, you can provide the availability and prices of each property for a given date range. When you include date ranges in this field, Facebook factors this availability into our product recommendations and tries to show listings that are available for the dates someone searched on your site. Optionally, if you include pricing we can also show date-specific prices in your ad creative. To enable this feature, you must also send Facebook lease_start_date and lease_end_date in your Pixel events.

Available Dates Object Parameters

Field Name and TypeDescription

start_date

type: string

Optional if end_date is provided.

Start of the available date range in ISO-8601 format; inclusive of the start date. If you only provide start_date, end_date defaults to a year from that date.

Example: YYYY-MM-DD, such as 2018-01-01.

end_date

type: string

Optional if start_date is provided.

End of the available date range in ISO-8601 format; excludes the end date. If you only provide end_date, start_date defaults to the current date.

Example: YYYY-MM-DD, such as 2018-02-01.

rate

type: string

Integer price of the listing during this time range.

Example: 10000 if the listing was $100.00 USD

currency

type: string

Required if you provide rate.

ISO-4217 currency code.

Example: USD, GBP, etc.

interval

type: string

Length of stay for the specified rate.

Allowed values are: nightly, weekly, monthly, sale.

This is an example of a listing's availability and how it appears in JSON:

"available_dates_price_config": [
    {
        // available until 11/01 at $150/night
        "end_date": "2018-11-01",
        "rate": "15000",
        "currency": "USD",
        "interval": "nightly",
    },
    {
        // available from 11/01 - 12/01 at $200/night
        "start_date": "2018-11-01",
        "end_date": "2018-12-01",
        "rate": "20000",
        "currency": "USD",
        "interval": "nightly",
    },
    {
        // available from 11/01 onward at $500/week
        "start_date": "2018-11-01",
        "rate": "50000",
        "currency": "USD",
        "interval": "weekly",
    },
]

Step 3: Update Options

You can refresh home listing info in the catalog through the following ways with direct upload. See Direct Upload Feed Reference

You can manually do a one-time upload:

curl \
    -F "url=http://www.example.com/sample_feed.xml" \
    -F "access_token=<ACCESS_TOKEN>" \
    https://graph.facebook.com/<API_VERSION>/<PRODUCT_FEED_ID>/uploads

Step 4: Filter Listing Catalog to Listing Set

This is a group of items in a catalog that you advertise in your Dynamic Ad. Each listing catalog can have many listing sets.

curl \
    -F "name=test set" \
    -F 'filter={"availability":{"eq":"for_sale"}}' \
    -F "access_token=" \
    https://graph.facebook.com/<API_VERSION>/<CATALOG_ID>/product_sets

The above filter is made up of the following operators and data:

OperatorsType of filter

i_contains

Contains substring (case insensitive)

i_not_contains

Does not contain substring (case insensitive)

contains

Contains substring (case sensitive)

not_contains

Does not contain substring (case sensitive)

eq

Equal to (case insensitive)

neq

Not equal to (case insensitive)

lt

Less than (numeric fields only)

lte

Less than or equal to (numeric fields only)

gt

Greater than (numeric fields only)

gte

Greater than or equal to (numeric fields only)

DataData to filter

availability

Listing availability e.g. for_sale

listing_type

Listing type e.g. for_sale_by_agent

property_type

Property type e.g. house

price

Listing price

name

Name

city

City

country

Country

region

Region or state

postal_code

Postal code

num_beds

Number of beds

num_baths

Number of baths