Nextdoor ad images: 1080x1080 or 2:1, 30 MB, 120-char headline

Nextdoor image ads use 1:1 at 1080 x 1080 or 2:1 at 1080 x 540, JPG or PNG up to 30 MB. Make the 1:1 with Sume and crop a 2:1 locally.

4 min readSume
All posts

Nextdoor image ads are 1:1 at 1080 x 1080 or 2:1 at 1080 x 540, in JPG or PNG up to 30 MB, with a headline of up to 120 characters. Sume's Image API lists 1:1 directly, so a square ad is one request; the 2:1 shape is not in its list, so crop a wider image to 1080 x 540 yourself.

The numbers are from Nextdoor's ads creative specs, read on 2026-10-02. That page has no video specs; for video see the related post.

What are the specs?

The page lists two image shapes.

Nextdoor image ad specs, from Nextdoor ads creative specs, read 2026-10-02.
ItemSpec
Square1:1 at 1080 x 1080
Wide2:1 at 1080 x 540
FormatsJPG or PNG
Maximum file size30 MB
Headline120 characters

Which shape should a local business use?

Square gives you more vertical room for a product or a team photo, while the 2:1 shape suits a storefront or a logo lockup. Make both from one source image so the ad set stays consistent.

Request the square, crop the wide

Use aspect_ratio 1:1 for the square. For the wide ad, ask for 16:9 with the subject centred, then crop to 2:1 with the script below, which keeps the centre.

import os, requests

r = requests.post(
    "https://api.sume.com/v1/images",
    headers={"Authorization": f"Bearer {os.environ['SUME_API_KEY']}"},
    json={
        "model": "sume/auto",
        "prompt": "Neighbourhood bakery storefront with the subject centred and open space left and right, no text in the image",
        "input_references": [
            {"type": "image_url", "image_url": {"url": "https://example.com/shop/storefront.jpg"}}
        ],
        "aspect_ratio": "16:9",
    },
    timeout=60,
)
body = r.json()
if r.status_code == 200:
    print(body["data"][0]["url"])
else:  # 202: poll the job
    print(body["data"]["status_url"])

Crop to 1080 x 540

After downloading the 16:9 result, this script centre-crops it to 2:1 and resizes to the exact size.

from PIL import Image

img = Image.open("ad-16x9.png").convert("RGB")
w, h = img.size
new_h = w // 2
top = (h - new_h) // 2
img = img.crop((0, top, w, top + new_h)).resize((1080, 540))
img.save("ad-1080x540.png")
print(img.size)

Sources

Related posts

More in Use cases

All Use cases posts

Written by Sume