Getting Real-Time Stock Data for Indonesian Markets Is More Troublesome Than You'd Think
I spent the better part of last year building a portfolio tracker that pulls live pricing for stocks on the Indonesia Stock Exchange (IDX). Most of the available options either throttle you to 15-minute delays, charge absurd amounts for anything approaching real-time, or return data that falls apart during volatile trading sessions. I eventually settled on a solution that I still use today. Here's what it actually is. It's an API layer that connects to Indonesian exchange feeds and returns stock data with minimal latency. The pricing tier matters a lot here. The free or starter tier gives you delayed quotes at best. If you need true intraday updates during market hours, you're looking at a paid plan, usually in the range of $50 to $200 per month depending on how many requests per second you need. My setup runs about 3 to 5 requests per second across maybe 200 to 400 tickers and it costs roughly $120 monthly. The registration process is straightforward. You create an account on their platform, verify your email, and generate an API key from the dashboard. Most of these keys have a rate limit built in, so you need to set up your requests carefully to avoid getting throttled mid-session. I configure my application to cache responses for a couple of seconds between requests to the same ticker. It sounds simple, but a lot of people skip this and then complain about intermittent failures when the market is moving fast.
How the API Actually Performs During Trading Hours
I have a script that polls every major Jakarta-listed company roughly once per second during the auction phase and then switches to a staggered polling schedule across the main session. The latency I observe from request to response is typically between 80 milliseconds and 300 milliseconds when the servers are healthy. During heavy volatility periods, like when the rupiah drops sharply or a large cap stock announces unexpected news, I've seen it climb to around 600 milliseconds. Not terrible, but if you're building something that depends on sub-100-millisecond responses for algorithmic execution, this is probably not the right tool. The response format is usually JSON with fields for ticker symbol, last price, bid, ask, volume, and timestamp. The timestamp is in UTC, which matters because Indonesia spans two time zones. I always convert to WIB before presenting anything to users, otherwise you end up with prices that appear to come from tomorrow.
A Problem I Ran Into That Took Me Two Weeks to Fix
About six months in, I noticed my dashboard was showing prices for certain mid-cap stocks that hadn't moved in hours even though the market was clearly trading them. I checked the raw API response and realized the data feed was returning stale cached values instead of live prices for those specific tickers. The issue wasn't with my code. It turned out the API provider had a known gap where stocks with low daily trading volume sometimes get their price updates held until a minimum volume threshold is met, then released in a batch. This meant my script was seeing what looked like real-time data for active names but completely frozen prices for illiquid ones. The workaround was to add a volume-check filter. Before trusting a price update, I compare the reported volume against the stock's average daily volume from the previous five trading sessions. If the current volume is below 10 percent of that average, I flag the price as potentially stale and fall back to the last confirmed trade time. This doesn't solve the root cause but it prevents the dashboard from displaying misleading prices to users.
Get the Full Details

What Nobody Tells You About This Data Source
First, the term real-time in this context doesn't mean the same thing as it does for US market data. The IDX has a different structure. Trades execute continuously but there are periodic breaks for auctions, and the feed from most API providers reflects the official transaction timestamps which can lag behind actual execution by a few seconds during fast markets. If you're comparing latency numbers against Bloomberg or Refinitiv, you'll always lose. This API is fine for retail-grade tracking and moderately serious quantitative work. It's not institutional grade. Second, the API has a hard daily request cap on most plans. I learned this the hard way when I ran a backtest script that looped through nearly 800 tickers. The script hit the daily limit around 2 PM and then simply stopped returning data. The API doesn't warn you ahead of time. It just starts returning 429 errors or empty responses. I now monitor the X-RateLimit-Remaining header on every response and pause my requests if it drops below a set threshold. This header isn't documented prominently on their site, which is annoying. Third, there's no web socket support on the standard plans. You're stuck with polling. Some providers offer a higher tier with streaming, but it pushes the monthly cost well above $500. For most people building dashboards or portfolio trackers, polling is acceptable. Just make sure your polling interval respects both your plan's rate limit and the market's actual update cadence. Polling every 100 milliseconds for 500 stocks will burn through your request budget in under an hour.
Getting Started Without Wasting Money
I'd recommend starting with a trial or the lowest paid tier and testing against maybe 20 to 30 tickers first. Don't roll it out to a full portfolio immediately. Watch the response times during different market conditions. Check how the data behaves during the IDX closing auction, which runs from 12:25 PM to 12:30 PM WIB. That's when I see the most inconsistencies across data providers. Also verify whether the API includes after-hours or pre-market data, because Indonesian markets do have sessions outside the core trading window and not every provider covers them equally. The download or access page is on the Inside Looks website. You'll need to sign up, pick a plan that matches your expected request volume, and grab your API key from the developer dashboard. Their documentation is decent but sparse on edge cases, which is why I'm writing this. The code integration itself is about as simple as it gets. You send a GET request with your key in the headers, specify the ticker symbols, and parse the JSON response. I use Python with the requests library and wrap it in a small caching layer to stay within limits.
When This Isn't the Right Choice
If you need tick-by-tick data for backtesting high-frequency strategies, look elsewhere. You'd be better served by a direct feed from a data vendor like IQFeed or a broker-level solution. If you're only tracking a handful of blue-chip stocks and 15-minute delayed data is acceptable, you might not need this at all. There are free tiers on other platforms that cover large-cap IDX stocks adequately for casual monitoring. But if you're building something that needs live price updates across a broad universe of Indonesian stocks and you're willing to pay for it, this API is one of the more reliable options I've tested in the past couple of years. The main thing to remember is to test aggressively before committing to a monthly plan. Run your scripts during actual trading hours, not just when the market is quiet. The differences you see then will tell you everything you need to know about whether this fits your project.
