A market hours widget answers a small question that shows up on almost every finance-adjacent site: is this market open right now? SiftingIO now publishes a free embeddable one at sifting.io/tools/widgets. You pick a market and a theme, copy a single iframe tag, and paste it into your page. No account, no script installation, nothing to maintain afterward. This post covers what the widget does, how to embed it, and where the underlying market hours API takes over once a badge stops being enough.
Why market hours logic is harder than it looks#
The weekly schedule is the easy part. US equities trade 9:30 to 16:00 Eastern, Monday through Friday, and you could hard-code that check in ten minutes. The trouble is everything layered on top. Holidays differ by country and move every year. Half-days close early, and an early close isn't always at the same time; US equities, for example, close at 13:00 Eastern the day after Thanksgiving. Daylight saving time shifts on different dates in the US and Europe, so the offset between a viewer in Berlin and a market in New York changes twice a year, in both directions. Several Asian markets pause for a midday lunch break, which means "open" has a hole in the middle of the trading day. Forex runs continuously through the week but still has a weekend boundary, and crypto never closes at all, which is its own display question.
None of that is hard to code. The cost is upkeep: per-market holiday calendars need refreshing every year, session rules carry exceptions, and a check that was right in March quietly goes wrong in November. For a trading system, you do that maintenance because money depends on it. For a status badge in a blog sidebar or at the top of an investor relations page, the upkeep costs more than the badge is worth.
What the widget does#
The widget is a live market-status badge served as a plain iframe. It shows whether the chosen market is open or closed along with a countdown to the next transition, and the countdown self-updates every 15 seconds without a page reload. Coverage spans 23 equity markets across the Americas, Europe, and Asia Pacific, including the US, Canada, Mexico, Brazil, the UK, Germany, France, the Netherlands, Italy, Spain, Switzerland, Sweden, Turkiye, Japan, Hong Kong, China, South Korea, Taiwan, India, Singapore, and Australia, plus forex and crypto sessions.
Everything is configured before you copy the tag. Themes come in light and dark. Sizes come in compact, standard, and wide, with adjustable width and height up to the full width of the container. The time display is the choice that matters most: the viewer's local time, the market's local time, or a fixed zone (New York, Chicago, London, Paris/Frankfurt, Dubai, Singapore, Tokyo, Sydney, or UTC).
There's no framework dependency and no SDK. The embed is a plain iframe plus a few lines of inline script, so it loads fast and pulls no bundle into your page. It also needs no account and no API key, so nothing expires and nothing gets billed.
Embedding it#
Open sifting.io/tools/widgets, choose the market, theme, size, and timezone display, and the page generates an iframe tag with those choices baked in. Copy it, paste it into your HTML where the badge should appear, and you're done. That's the whole integration. There's no build step and no npm package to keep current.
The iframe boundary is worth understanding because it cuts both ways. Your page's CSS can't reach inside the widget, and the widget's script can't touch your page. That isolation is why it's safe to paste into a CMS or an investor relations template you don't fully control, but it also means the configurator is your only styling surface: theme, size, and timezone are chosen there, then re-copied if you change your mind.
Typical homes for it: the header of an investor relations page, so visitors know whether the listing's home market is trading; a trading education article that references session opens; the corner of an internal dashboard; a fintech blog's sidebar.
When a badge stops being enough: the market hours API#
The widget answers the question for a human looking at a page. When code needs the answer, the market hours API is the tool. /v1/fnd/markets lists a catalog of 23 markets, /v1/fnd/markets/status returns an open or closed snapshot for every market at once, and each market has its own /status, /hours (the weekly schedule in venue-local times), and /calendar (holidays and half-days).
# Is the US equities market open right now
curl -H "X-API-Key: $SIFTING_KEY" \
"https://api.sifting.io/v1/fnd/markets/us_equities/status"
# Holidays and half-days for the year ahead
curl -H "X-API-Key: $SIFTING_KEY" \
"https://api.sifting.io/v1/fnd/markets/us_equities/calendar"
That's the right tool for jobs like pausing a price poller while a market is closed, scheduling a task for the next open, or shading session boundaries on a chart. The free tier includes 10,000 REST calls a month with no credit card, which is plenty for schedule checks.
Common pitfalls#
Market-local time for a global audience. If your readers are worldwide and the widget shows "opens 09:00" in Tokyo time, a visitor in Chicago will read that as their own morning. Default to the viewer's local time unless the page is explicitly about one venue's schedule; an investor relations page for a Japanese listing is a reasonable exception, and the fixed-zone options cover that case.
Theme mismatch you can't patch from outside. A light-theme badge on a dark page renders as a bright rectangle, and because the widget is a cross-origin iframe, your stylesheet can't restyle it and CSS filter tricks tend to mangle the text. Pick the dark theme in the configurator and re-copy the tag instead.
Computing open or closed from the weekly schedule alone. This one applies if you graduate to the API: /hours describes the normal week and contains no holidays or half-days. A "Monday to Friday, 9:30 to 16:00" check derived from it will happily show a market open on January 1. Use /status for the live answer, or join /hours with /calendar if you're building the logic yourself.
For a status badge, though, the API is more machinery than the job needs. Configure the market, theme, size, and timezone at sifting.io/tools/widgets, copy the iframe tag, and the open-or-closed question is answered on your page in the time it takes to paste. If you later want the data behind it, read the docs.


