OHLC.dev editorialIDX

IDX Trading Catalyst Scanner Using Corporate Action RUPS and Market Event Intelligence

This article presents an IDX Trading Catalyst Scanner using IDX API data to identify corporate actions RUPS schedules and market events through automated classification and impact scoring.

September 21, 20264 min readRafatar
IDX Trading Catalyst Scanner Using Corporate Action RUPS and Market Event Intelligence

Stock market movements are often influenced by specific events that can create potential trading opportunities. Corporate actions, shareholder meetings, dividends, right issues, and other market events may affect investor sentiment and market activity.

However, monitoring multiple market events manually can be inefficient. This project develops an IDX Trading Catalyst Scanner using IDX RapidAPI data to automatically collect, classify, and rank market catalysts.

The system integrates:

  • Market calendar monitoring

  • RUPS event detection

  • Corporate action classification

  • Impact scoring

  • Trading priority ranking

  • Automated Excel reporting

The project is developed using Python with Requests for API communication, Pandas for data processing, JSON normalization for API transformation, and Excel export for reporting.

The workflow consists of five main stages: API configuration, market calendar retrieval, RUPS analysis, stock symbol mapping, and catalyst intelligence generation.


Cell 1 — Import Library and API Configuration

The first cell establishes the IDX RapidAPI connection and creates a reusable API request function.

# ============================================
# CELL 1 : SETUP API IDX
# ============================================

import requests
import pandas as pd
import json
from datetime import datetime


RAPIDAPI_KEY = "YOUR_API_KEY"


BASE_URL = "https://indonesia-stock-exchange-idx.p.rapidapi.com"


HEADERS = {

    "Content-Type": "application/json",

    "x-rapidapi-host":
    "indonesia-stock-exchange-idx.p.rapidapi.com",

    "x-rapidapi-key":
    RAPIDAPI_KEY

}



def call_idx_api(endpoint, params=None):

    url = BASE_URL + endpoint


    response = requests.get(

        url,

        headers=HEADERS,

        params=params

    )


    response.raise_for_status()


    return response.json()



print("API IDX Connected")


Cell 2 — Market Calendar Analysis

This cell retrieves today's IDX market calendar data and converts the JSON response into a structured DataFrame.

The calendar dataset becomes the initial source for identifying available market events.

# ============================================
# CELL 2 : MARKET CALENDAR TODAY
# ============================================


today_calendar = call_idx_api(

    "/api/calendar/today"

)



print(

    json.dumps(

        today_calendar,

        indent=2

    )[:3000]

)



if isinstance(today_calendar, dict):

    today_df = pd.json_normalize(

        today_calendar

    )

else:

    today_df = pd.DataFrame(

        today_calendar

    )



print(

    "Total Calendar Data:",

    len(today_df)

)



today_df.head()

Cell 3 — RUPS Event Analysis

This cell retrieves shareholder meeting information from IDX API.

RUPS data is analyzed because shareholder meetings can contain strategic company decisions that may influence market perception.

# ============================================
# CELL 3 : RUPS ANALYSIS
# ============================================


rups_data = call_idx_api(

    "/api/calendar/rups"

)



print(

    json.dumps(

        rups_data,

        indent=2

    )[:3000]

)



if isinstance(rups_data, dict):

    rups_df = pd.json_normalize(

        rups_data

    )

else:

    rups_df = pd.DataFrame(

        rups_data

    )



print(

    "Total RUPS Event:",

    len(rups_df)

)



rups_df.head()

Cell 4 — Stock Symbol Database

This cell retrieves stock symbol information used as a reference for company identification during catalyst scanning.

# ============================================
# CELL 4 : STOCK SYMBOL DATABASE
# ============================================


symbols = call_idx_api(

    "/api/main/symbols",

    params={

        "range":10

    }

)



print(

    json.dumps(

        symbols,

        indent=2

    )[:3000]

)



if isinstance(symbols, dict):

    symbols_df = pd.json_normalize(

        symbols

    )

else:

    symbols_df = pd.DataFrame(

        symbols

    )



print(

    "Total Symbols:",

    len(symbols_df)

)



symbols_df.head()

Cell 5 — IDX Trading Catalyst Scanner Dashboard

The final cell combines market event data into a trading catalyst scanner.

Each event is classified into several categories:

  • Dividend

  • Right Issue

  • Stock Split

  • RUPS

  • Corporate Event

The system then assigns impact scores and converts them into trading priorities.

# ============================================
# CELL 5 : IDX TRADING CATALYST SCANNER
# ============================================


import pandas as pd



print("="*70)

print("IDX TRADING CATALYST SCANNER")

print("="*70)



# Combine corporate action and RUPS data

scanner = pd.DataFrame()



if "event_df_analysis" in globals():

    scanner = pd.concat(

        [

            event_df_analysis,

            rups_df

        ],

        ignore_index=True

    )


else:

    scanner = rups_df.copy()



# Remove empty symbols

if "company_symbol" in scanner.columns:

    scanner = scanner[

        scanner["company_symbol"].notna()

    ]



# ============================================
# EVENT CLASSIFICATION
# ============================================


def classify_event(row):

    text = str(row).lower()


    if "dividend" in text:

        return "DIVIDEND"


    elif "right" in text:

        return "RIGHT ISSUE"


    elif "split" in text:

        return "STOCK SPLIT"


    elif "rups" in text:

        return "RUPS"


    else:

        return "CORPORATE EVENT"



scanner["event_category"] = scanner.apply(

    classify_event,

    axis=1

)



# ============================================
# IMPACT SCORE
# ============================================


impact_score = {

    "DIVIDEND":3,

    "STOCK SPLIT":3,

    "RIGHT ISSUE":2,

    "RUPS":1,

    "CORPORATE EVENT":1

}



scanner["impact_score"] = (

    scanner["event_category"]

    .map(impact_score)

    .fillna(1)

)



# ============================================
# TRADING PRIORITY
# ============================================


def trading_priority(score):

    if score >= 3:

        return "HIGH"


    elif score == 2:

        return "MEDIUM"


    else:

        return "LOW"



scanner["priority"] = (

    scanner["impact_score"]

    .apply(trading_priority)

)



# ============================================
# DISPLAY RESULT
# ============================================


display(

    scanner.sort_values(

        "impact_score",

        ascending=False

    ).head(30)

)



# ============================================
# EXPORT REPORT
# ============================================


scanner.to_excel(

    "IDX_TRADING_CATALYST.xlsx",

    index=False

)



print(

    "Export completed: IDX_TRADING_CATALYST.xlsx"

)


Conclusion

This project successfully develops an IDX Trading Catalyst Scanner using IDX RapidAPI data to identify and rank market events based on their potential trading impact.

The system integrates market calendar information, RUPS schedules, and corporate action events into an automated event intelligence workflow.

Through event classification and impact scoring, raw IDX market data can be transformed into a structured catalyst dashboard containing:

  • Company symbol

  • Event category

  • Impact score

  • Trading priority

The automated Excel export improves usability by providing a structured report for further monitoring.

However, this system should be considered as a market event screening tool, not a standalone trading decision system. Additional evaluation using financial fundamentals, valuation, technical analysis, liquidity, and market sentiment is still required.

Overall, the IDX Trading Catalyst Scanner demonstrates how API-based financial analytics can support automated event-driven stock market monitoring.