Skip to content
All articles

How Should an AI Agent Handle Holidays When It Posts for Many Different Audiences?

How an AI agent should schedule around holidays: map each account to its traditions, call get_holidays, read calendar_notes and block the evening before.

7 min read

Calendar diagram: each holiday of a given tradition carries advice: avoid promotional content, sensitive, or an opportunity for a greeting.
The agent checks the holidays of each account's audience before it schedules. (Examples)

An agent that posts for many accounts should check every scheduled time against the holidays of each account's audience, not against one national calendar. In Shager that means two checks: call get_holidays for the traditions that matter before planning, then read the calendar_notes that come back on every scheduled post. The part no tool can do for the agent is deciding which traditions apply to which account, so that has to be written down per client.

The calendar is easy. The mapping is the hard part.

Most holiday mistakes come from assuming every audience shares one calendar, not from missing data.

Picture an agency running these accounts from one workspace:

  1. A family restaurant in a Druze village in the Galilee.
  2. A chain of dental clinics whose patients are mostly Arab citizens of Israel.
  3. A housewares shop selling to a Haredi audience.
  4. A community center for Russian speakers, where part of the audience follows the Orthodox church calendar.
  5. An e-commerce brand that ships to Europe and North America.

A cheerful discount post on a Tuesday can be fine for four of them and badly timed for the fifth. An agent knows only what is in its instructions. So before any of the tooling below helps, each client profile needs one explicit line: the traditions this audience observes. If you already run one agent across many clients, that profile is where it belongs.

What does Shager's holiday calendar cover?

The calendar includes Jewish and Israeli, Muslim, Western Christian, Orthodox Christian, Druze, Bahá'í, Hindu, Buddhist, Sikh, Jain, Chinese and Persian holidays. It also includes international and commercial days: Valentine's Day, International Women's Day, US Mother's Day and Father's Day, Halloween, Singles' Day, Thanksgiving, Black Friday, Cyber Monday and New Year.

Every day carries one of four pieces of posting advice:

Advice What the agent should do Examples
avoid No promotional content to that audience Yom Kippur; Holocaust Remembrance Day and Memorial Day in Israel
sensitive Respectful content only, no hard sell, no jokes Fast days, Good Friday, Ashura, Day of Arafah, Laylat al-Qadr
opportunity A greeting or a themed post fits Eid al-Fitr, Christmas, Diwali, Lunar New Year, Black Friday
normal Nothing to change Everything else

The app's calendar shows the same data to humans, with a tradition filter and a colour per advice.

Timeline diagram: posts to different accounts are spread over minutes, in a separate lane per network, instead of all going out in the same second.
Staggering respects each network's pace and avoids looking like spam. Default: 30 to 90 seconds between accounts on the same network.

Calling get_holidays

It is exposed as the MCP tool get_holidays and as a REST operation documented in the OpenAPI spec:

curl -s "https://app.shager.ai/api/v1/holidays?from=2026-11-20&to=2026-12-05&traditions=jewish,muslim&language=en" \
  -H "Authorization: Bearer $SHAGER_API_KEY"

Without from and to, the range is today plus 60 days. The maximum is 400 days. traditions filters to the ones you name, and language returns names in English or Hebrew. The response has this shape:

{
  "data": {
    "from": "2026-11-20",
    "to": "2026-12-05",
    "note": "...",
    "holidays": [
      {
        "date": "YYYY-MM-DD",
        "tradition": "...",
        "name": "...",
        "key": "...",
        "advice": "opportunity",
        "guidance": "...",
        "approximate": true
      }
    ]
  }
}

Pass guidance on to the human reviewer; it explains in one sentence why a post moved.

The call sequence, end to end

Here is the order I use for a weekly run. Take late November 2026 as the example: Thanksgiving falls on Thursday the 26th, Black Friday on the 27th and Cyber Monday on the 30th. For the e-commerce brand, that is a run of opportunity days. For the Haredi shop or the Druze restaurant, those days may simply be normal and not worth a themed post at all.

get_holidays  { from: "2026-11-20", to: "2026-12-05", traditions: <union of all profiles in this run> }

create_post   { workspace_id: "ws_retail",
                channel_ids: ["ch_shop_eu_ig", "ch_shop_us_fb"],
                caption: "...",
                per_channel: [
                  { channel_id: "ch_shop_eu_ig", caption: "..." },
                  { channel_id: "ch_shop_us_fb", caption: "..." }
                ],
                media_ids: ["med_19ae"] }

schedule_post { workspace_id: "ws_retail", post_id: "pst_5d2c",
                schedule_at: "2026-11-27T09:00:00-05:00" }

read calendar_notes on the returned post
  if any entry is avoid or sensitive for a tradition in this account's profile:
    cancel_post, pick a new time, schedule again, and log why

First, per_channel lets one post carry a different caption per account, so the US page can mention Thanksgiving weekend while the EU page talks about Black Friday without the American framing. I wrote more about that in caption variation per account.

Second, a post has a single schedule time. When two audiences in the same group disagree about a day, captions cannot fix it. Split them into separate posts with separate times.

calendar_notes comes back on every post returned by create_post, get_post and schedule_post, listing the holidays on that post's scheduled day with their advice. It catches what planning missed, including a time someone changed by hand.

Why "begins the evening before" breaks naive date checks

Jewish holidays start at sundown on the evening before the date a calendar shows. The Reform movement's explanation traces this to the creation story, where evening comes before morning. The Islamic day also begins at sunset.

An agent that compares dates only will get this wrong in a predictable way. The calendar lists Yom Kippur on one date. The agent checks a promo scheduled for 19:00 on the previous date, sees no match, and publishes into the start of the fast.

In Israel the stakes are higher on the two memorial days. Memorial Day for fallen soldiers begins at sunset the night before, and places of entertainment are closed by law during the day. On Holocaust Remembrance Day, places of public entertainment are closed by law on the eve and on the day itself. A brand posting a playful sale that evening breaks no law, but the audience notices.

My rule in agent instructions is simple: for avoid and sensitive days, the afternoon and evening of the day before count as part of the day. For opportunity days, the evening start helps you, because a greeting that lands before the holiday begins arrives on time.

Why are Islamic dates marked approximate?

Shager computes Islamic dates from the Umm al-Qura calendar and marks them approximate: true. Umm al-Qura is Saudi Arabia's official calendar and is calculated in advance, while the start of the religious months depends on sighting the crescent moon. The New Arab quotes the calendar's own former website saying it may not match actual crescent visibility. Countries also apply different sighting criteria, so Eid can fall on different days in different countries.

The drift is about one day. For the clinic chain, that means: prepare the Eid al-Fitr greeting as a draft early and schedule it after the local announcement, or write it so it still reads well a day early. For an approximate sensitive day, leave a buffer day on each side. For audiences spread across countries, do not assume one date fits all of them.

A prompt you can adapt

Before scheduling anything this week:
1. Read each client's audience profile and list its traditions. If a profile has none, stop and ask me.
2. Call get_holidays once for the whole week, with the union of those traditions.
3. avoid: no promotional posts to that audience, including the afternoon and evening before.
4. sensitive: respectful tone only. No discounts, no humour, no countdowns.
5. opportunity: propose a greeting or themed post, written separately per account with per_channel.
6. approximate=true: keep a one day buffer, or wait for the local announcement.
7. After schedule_post, read calendar_notes. On a conflict, cancel, reschedule and tell me what changed.

Pair it with the timing rules from scheduling strategy for agents, so offsets and holidays are handled in the same pass.

Checklist before every scheduled run

  1. Every account has an audience profile with an explicit list of traditions.
  2. One get_holidays call covers the full date range of the run.
  3. An avoid day also blocks the evening before it.
  4. A sensitive day changes the tone, not only the time.
  5. opportunity posts are written per audience, never one generic greeting for all.
  6. Approximate dates get a buffer day.
  7. Mixed audiences on a contested day are split into separate posts.
  8. After scheduling, the agent reads calendar_notes and reports every change it made.

Weekly rest days such as Shabbat are a fixed rule rather than a calendar entry, so put them in the audience profile as blocked time windows.

If your agent is not connected yet, the agent entry point walks through setup. Once it is, the first useful job is small: add the traditions line to every client profile and run get_holidays across the next two months to see what is coming.

FAQ

Does Shager block scheduling on an avoid day?

No. The advice is information, returned by get_holidays and in each post's calendar_notes. The decision stays with the agent and whoever approves its work, because the same day can be solemn for one audience and ordinary for another.

How does the agent know which traditions apply to an account?

It should not guess from a business name or a city. Write the traditions into each client's audience profile and instruct the agent to stop and ask when that line is missing.

Should a global e-commerce brand care about religious holidays at all?

Yes, mostly for its larger markets. Group its accounts by market, check each group against the commercial days plus the traditions common in that market, and write greetings per group. A Christmas post is an opportunity in one market and irrelevant or awkward in another.

Want to try it on your accounts?

Shager distributes, measures and gets client approval, all in one place.