Posting at a human pace: warm-up, jitter and spacing rules for automated accounts
Scheduling rules for safe social automation: a weekly warm-up ramp, ±30% daily variation, random times in a window and gaps between repeats of a link.
- No network publishes a “safe” number of posts. What gets flagged is behaviour, not one number.
- Seed the randomness by account and day, so re-planning a day gives the same answer instead of drifting upward.
- Split the posting window into equal slots and jitter inside each slot: random, but never clustered.
- Count repeat gaps per network. A product on Pinterest may still go to Facebook the same day.
- After downtime, move missed posts to free slots. Never publish the backlog in a burst.
The networks are deliberately vague about how they detect spam. Pinterest’s Community Guidelines and Meta’s rules on inauthentic behaviour describe what they do not want (repetitive, high-volume, misleading activity) without publishing thresholds. That is sensible on their side, and it means a scheduler has to be conservative by design. These are the rules Cast Forge applies to every connected account, with the defaults we ship.
What looks automated
Put yourself in the position of a spam classifier. These signals cost almost nothing to compute, and a naive scheduler produces all of them:
- A volume spike on a new account. Zero posts last week, forty today.
- Identical rhythm. Exactly eight posts every day, every day.
- Clock-like timing. Posts at 09:00, 11:00, 13:00, or always at :00.
- The same link everywhere at once. One product URL on six accounts within the hour.
- Bursts after silence. A dozen posts in two minutes when a server comes back up.
Each rule below removes one of these.
Rule 1: the warm-up ramp
The daily target grows linearly with the account’s age in weeks, up to a ceiling:
base = min(max_per_day, start + step_per_week × weeks_since_first_post)
Our defaults are start = 1, step_per_week = 1, max_per_day = 10. A new account posts once a day in week one, twice in week two, and reaches ten a day after about ten weeks. Every account warms up on its own: an account added to an existing site starts at one, even if its neighbours already post ten.
Rule 2: natural day-to-day rhythm
Around the target, each day gets its own count: about one day in twelve is skipped, and the rest vary between 70% and 130% of the target. The important detail is where the randomness comes from:
def daily_target(site, account, day, started):
weeks = max(0, (day - started).days // 7)
base = min(MAX, START + STEP * weeks)
rng = random.Random(f"{site}|{account}|{day.isoformat()}") # seeded, not global
if rng.random() < 1 / 12:
return 0 # a day off
return max(1, min(MAX, round(base * rng.uniform(0.7, 1.3))))
The planner runs every night and re-checks the next 30 days. With unseeded randomness, every run draws new targets. Days that drew low get topped up and days that drew high keep what they already have, so volume creeps upward with each run. Seeding by (site, account, day) makes the target a property of the day: re-planning is idempotent, and two accounts never share the same pattern.
Rule 3: random times, never clustered
Posting at fully random times inside a window sounds natural, but uniform random times cluster: five posts in twenty minutes and then nothing for six hours is a normal outcome. Instead, split the window into equal slots and jitter inside each one:
def spread_times(day, count, window=(7, 23)):
start, end = window
slot = (end - start) * 3600 / count
base = datetime.combine(day, time(start))
return [base + timedelta(seconds=int(slot * i + random.uniform(0.1, 0.9) * slot))
for i in range(count)]
With 8 posts between 07:00 and 23:00, each post lands somewhere in its own two-hour slot. Keeping the jitter between 10% and 90% of the slot guarantees a minimum distance between neighbours. Times end up at irregular minutes and seconds, never on the hour.
Rule 4: spacing out repeated links
Three settings control repetition, all counted per network:
| Setting | Default | Meaning |
|---|---|---|
max_pins_per_url | 1 | How many times one product may ever be posted, across all accounts of the network |
min_days_between_same_url | 5 | Gap before the same account posts the same link again |
min_days_between_accounts | 3 | Gap before another account on the same network posts that link |
The gaps apply in both directions around a date, because slots are planned weeks ahead and can be filled out of order. Accounts are planned one after another, so each account’s planning already sees the links the previous account just reserved.
Choosing what to post next
Among the products allowed on a given day, Cast Forge ranks candidates by:
- never posted on this account before,
- matching the site’s priority pattern (for example new arrivals or a seasonal collection),
- earlier posts of the product earned clicks,
- fewest posts so far across the network,
- longest since this account last posted it.
Candidates are shuffled before sorting, so products that tie do not always come out in the same order.
After downtime: reschedule, don’t burst
Servers restart, AI quotas run out, laptops sleep. When the publisher comes back, every slot whose time has passed is due at once, and publishing them all is exactly the burst we spent four rules avoiding. Our publisher treats a slot more than 30 minutes late as missed and moves it:
- to the account’s next day that is still under its target,
- into the widest free gap of the posting window, at 35–65% of the way through it,
- never closer than 20 minutes to another post of the same account,
- only if the link-spacing rules still hold on the new date.
When every day is full, a post that already has its copy and image takes the place of an empty future slot, so no AI work is thrown away and the daily count never goes over target.
Stay under the hard limits too
Human pacing keeps you far below the API ceilings. Check them anyway, because they are absolute: Instagram allows 100 API-published posts per account in a rolling 24 hours, Threads allows 250, and Pinterest’s Trial access allows 300 Pin writes a day per app, shared by all your accounts. Details in our guides to Instagram and Threads publishing and the Pinterest API.
Checklist
- Start each new account at 1 post a day. Add 1 a week up to your ceiling.
- Vary daily counts by ±30% with occasional rest days, seeded per account and day.
- Jitter post times inside equal slots of a waking-hours window.
- Enforce link gaps per network, both across accounts and within one account.
- Reschedule missed slots into free gaps. Never publish a backlog in one go.
Frequently asked questions
How many posts a day is safe for a new account?
No network publishes a safe number. Start at one or two a day and add about one a week; what gets accounts flagged is behaviour that looks automated, such as a sudden jump in volume on a new account.
Why randomise the number of posts per day?
Nobody posts exactly eight times every day. Varying the count by about ±30% and skipping the odd day removes a pattern that is trivial to detect, without changing the weekly volume.
Can the same link be posted on several accounts?
Yes, but not at the same time. Keep a gap of a few days between accounts on the same network and a longer gap before the same account posts the link again.
Sources
Platform limits and specs were checked against these pages on October 26, 2026. They change; the linked docs are authoritative.