This guide shows how to use the readysignal Python package to call the Ready Signal API for listing signals, fetching metadata, retrieving output (as JSON or pandas DataFrames), running Auto Discovery, and handling pagination and status checks.
– API base: https://app.readysignal.com
– PyPI: pip install readysignal
– GitHub repo: https://github.com/rxa-io/readysignal
The Ready Signal API Python library can be found here:
https://pypi.org/project/readysignal/
Download Jupyter Notebook Starter Package
1. Get an Access Token
To use the Ready Signal API, you’ll need an access token to authenticate your requests:
Log in and locate your API credentials
1. Log in to your Ready Signal Account
2. Open an existing Signal or create a new one.
3. Select Output for the Signal
4. In the API Credentials section clip the copy icon next to your access token
That’s it. You will use that token to authenticate your next requests.

2. Install and import
pip install --upgrade readysignal
import os
import readysignal as rs
import pandas as pd
Tip: Store your token securely (e.g., environment variable) rather than hard-coding it
ACCESS_TOKEN = os.getenv("READYSIGNAL_TOKEN") # set this in your shell or .env
2. GET My Signals
Retrieve a list of all signals associated with your Ready Signal account. Each record includes summary information such as configuration, time range, status and output links.
signals = rs.list_signals(ACCESS_TOKEN)
signals # dict with your signals (id, name, status, links, etc.)
Example Output
{ |
3. GET Signal Metadata
Retrieve detailed information about a specific signal ID, including configuration, metadata.
This endpoint is typically used to inspect a signal’s setup and metadata before fetching its output.
signal_id = 1234
signal_meta = rs.get_signal_details(ACCESS_TOKEN, signal_id, optimized= 1) # or optimized=0signal_meta # dict with config, features (incl. lead/lag), links, status
Parameters
| Parameter | Type | Required | Description |
ACCESS_TOKEN | string | yes | Your Ready Signal Bearer Token |
| signal_id | integer | yes | Your Ready Signal Signal ID |
optimized | Boolean | Optional | When present (or set to 1), returns optimized signal metadata. Only available for signals generated by auto-discovery (or Market Scout in the GUI) where create_custom_features = 1. |
Example Output
{ |
4. GET My Signal Output
Retrieve the processed output data for a specific signal ID
You can filter by startDate, endDate, limit to the target variable range, and request optimized output (for signals created with Auto Discovery using create_custom_features=1)
Defaultrs.get_signal_pandas(access_token, signal_id) #returns pandas dataframe) #returns JSON
rs.get_signal(access_token, signal_id
Optional Parametersrs.get_signal_pandas(access_token, signal_id, optimized=1, startDate=YYYY-MM-DD, endDate=YYYY-MM-DD, useTargetVariableDates=1) #returns pandas dataframe
Parameters
| Parameter | Type | Required | Description |
ACCESS_TOKEN | string | yes | Your Ready Signal Bearer Token |
| signal_id | integer | yes | Your Ready Signal Signal ID |
optimized | Boolean | Optional | When present (or set to 1), returns optimized signal output. Only available for signals generated by auto-discovery (or Market Scout in the GUI) where create_custom_features = 1. |
| startDate | String (YYYY-MM-DD) | Optional | Filters output to data starting on or after this date. |
endDate | String (YYYY-MM-DD) | Optional | Filters output to data ending on or before this date. |
useTargetVariableDates | Boolean | Optional | When present (or set to 1), limits the output to the date range of the target variable. |
Example Return
{ |
5. Auto Discovery
Auto Discovery finds external drivers (economic, demographic, weather, etc.) that explain your target series. You can submit data as an array or upload a file. Supported time grains: Month or Day. For monthly, dates must be the first day of the month (YYYY-MM-01). Processing is asynchronous and returns a signal_id immediately.
signal_auto_discover = rs.auto_discover(
access_token=ACCESS_TOKEN,
df=my_target_df, # OR use "file_path='path/to.csv|xlsx'"
filtered_geo_grains="usa", # "usa" | "nonusa" | "all"
create_custom_features=1, # enable optimized signal generation
)
Request Parameters
| Parameter | Type | Required | Description |
| filtered_geo_grains | String | Optional | Filter which geographies are included in discovery. Options: usa, nonusa, or all. |
| create_custom_features | Boolean | Optional | Enables custom feature generation if set to 1. |
| data | Array of Objects | Yes (if not file) | Array of data objects containing your time series. |
| file | Excel or CSV | Yes (if not data) | Excel or CSV file containing your time series. |
Data Object
| Field | Type | Required | Description |
| Date | String (YYYY-MM-DD) | Yes | Date of the observation (first day of month). |
| Value | Numeric | Yes | Value of your target variable (custom feature). |
Example Response
{ |