client.imessage_conversations() -> pd.DataFrame
client.imessage_messages() -> pd.DataFrame
Example
from jmail import JmailClient
client = JmailClient()
convos = client.imessage_conversations()
messages = client.imessage_messages()
# All messages from a specific conversation
ghislaine = messages[messages.conversation_slug == "ghislaine-maxwell"]
# Messages sent by Epstein
sent = messages[messages.sender == "me"]
# Join messages with conversation metadata
merged = messages.merge(
convos[["slug", "name"]],
left_on="conversation_slug",
right_on="slug",
how="left"
)
Conversation Columns
| Column | Type | Description |
|---|---|---|
id | int | Unique conversation ID |
slug | string | URL-safe conversation identifier |
name | string | Contact name |
bio | string | Contact bio/description |
photo | string | Contact photo URL |
last_message | string | Preview of the last message |
last_message_time | string | Timestamp of last message |
pinned | bool | Whether the conversation was pinned |
confirmed | bool | Whether the contact identity is confirmed |
source_files | json | Source files this conversation was extracted from |
message_count | int | Total messages in this conversation |
Message Columns
| Column | Type | Description |
|---|---|---|
id | string | Unique message ID ({slug}#{index}) |
conversation_slug | string | FK to conversations (slug) |
message_index | int | Message position within conversation |
text | string | Message text content |
sender | string | me (Epstein) or them (contact) |
time | string | Original timestamp string |
timestamp | timestamp | Parsed timestamp |
source_file | string | Source file this message was extracted from |
sender_name | string | Display name of sender |
Direct URLs
https://data.jmail.world/v1/imessage_conversations.parquet
https://data.jmail.world/v1/imessage_conversations.ndjson.gz
https://data.jmail.world/v1/imessage_messages.parquet
https://data.jmail.world/v1/imessage_messages.ndjson.gz
