# Auto-schedule your Notion social calendar to Buffer

> Every Monday, Wednesday, and Friday morning, write per-platform captions, pair each Notion calendar row with a stock photo, and schedule it in Buffer.

- Workflow type: agent
- Services: Notion, Pexels, Buffer
- Categories: Marketing
- Published: 2026-05-21

## What it does

- Reads the upcoming posts in your Notion social calendar that still need scheduling.
- Writes a tailored caption for each channel, with the right length and tone for LinkedIn, Instagram, and X.
- Finds a matching free stock photo from Pexels and includes the required photographer credit.
- Schedules every post in Buffer at the publish time on your Notion row, then flips the row to Scheduled.

## What you'll need

- A Notion workspace with a social calendar database (topic, target channels, publish date, status).
- A free Pexels account for stock photos.
- A Buffer account with your social channels (LinkedIn, Instagram, X, etc.) already connected.

## Prompt

Every Monday, Wednesday, and Friday at 9am ET, fill out and schedule the upcoming posts in my Notion social calendar.

Step 1. In Notion, query the data source for my "Social Calendar" database. Filter to rows where Status = "Needs scheduling" AND Publish Date is within the next 7 days.

Step 2. For each row, read the topic and the list of target channels (any combination of LinkedIn, Instagram, and Twitter/X).

Step 3. For each target channel, draft a platform-specific caption tuned to that channel's character limit and tone:

• LinkedIn: professional, 1 to 3 short paragraphs, up to 3000 characters.

• Instagram: visual-first and conversational, under 2200 characters, with 5 to 10 relevant hashtags.

• Twitter/X: punchy and standalone, under 280 characters, at most 1 to 2 hashtags.

Step 4. Call Pexels Search Photos for a portrait or square image that matches the row's topic. Pick the best match. Capture the photographer's name and the Pexels photo URL so it can be credited per Pexels' attribution rules ("Photo by {photographer} on Pexels").

Step 5. For each target channel on the row, call Buffer Create Post with: the platform-specific caption text (with the photographer credit appended), the Pexels image URL as the media asset, and scheduledAt set to the row's Publish Date.

Step 6. After every Buffer post for that row is created, call Notion Update a Page on the row to (a) write the returned Buffer post IDs into a "Buffer post IDs" property and (b) flip Status to "Scheduled".

Error handling: If Pexels returns no good match, retry once with a broader search term derived from the topic; if it is still empty, schedule the Buffer post as text only. If Buffer Create Post fails for any channel (e.g. daily posting limit hit, channel disconnected), write the error message into a "Last error" property on the Notion row and leave Status as "Needs scheduling" so I can retry on the next run.

Do not publish anything immediately. Every Buffer post should be created in scheduled mode at the row's Publish Date.

## How to customize

- Change which days and time of day the agent runs.
- Add or remove target platforms (LinkedIn, Instagram, X, Facebook, TikTok, Threads, and more).
- Tune the tone, hashtag count, or length guidelines per platform.
- Rename or re-filter the status column (for example, only schedule rows marked Approved).

## FAQ

### Do I need a paid Buffer plan?

No. A free Buffer account works. Free accounts can create one API key, which is all this workflow needs.

### What if I do not have a Pexels account yet?

Sign up at pexels.com and request an API key from their API page. It is free and usually approved instantly.

### Can I review captions before they go out?

Yes. The agent only schedules posts in Buffer, it does not publish them immediately. You can also add a Draft status in Notion so the agent only touches rows you have approved.

### Will this work if my Notion calendar uses different column names?

Yes. Tell Geni which Notion fields represent the topic, target channels, publish date, and status, and it will adapt.

### What happens if Pexels has no good match for a topic?

The agent retries with a broader search term. If it still cannot find a match, it schedules the post as text only rather than skipping the row.

Use this prompt in General Input: https://www.generalinput.com/prompts/auto-schedule-your-notion-social-calendar-to-buffer