AI-powered email processing and CRM automation
Project description
CRM Automator: Modular Agentic CRM Toolkit
Author: Trung Le
Team: RealTimeX.ai
Repository: https://github.com/therealtimex/crm-automator
Overview
The CRM Automator is a modular, agentic toolkit designed to transform unstructured data (emails, transcripts, documents) into structured CRM records. Unlike monolithic automation scripts, this toolkit is built as a collection of reusable Tools that can be orchestrated by AI agents or run as standalone pipelines.
Current Status: Production-Ready (v2.0)
Key Features
- 🧩 Modular Architecture: Decoupled Ingestion (EML/Text), Intelligence (LLM Extraction), and Integration (CRM Sync).
- 🤖 Agent-Ready: Components like
IntelligenceLayerandRealTimeXClientare designed to be imported as tools for frameworks like LangChain or Autogen. - 🛡️ Idempotent & Safe: Implements "Search-before-Update" patterns and SQLite-based state tracking to prevent duplicate records.
- 🧹 Smart Cleaning Pipeline: Automatically converts bloaty HTML into clean Markdown, strips noise, and resolves tracking links (e.g., unwraps Proofpoint/Safelinks and resolves HubSpot redirects) to ensure accurate URL extraction.
- 🧠 OpenAI-Compatible: Works independently with OpenAI, Anthropic, or local LLMs (via LM Studio/Ollama) using
instructor.
Installation
-
Clone the repository:
git clone https://github.com/therealtimex/crm-automator.git cd crm-automator
-
Install dependencies:
# Option A: Standard pip pip install -r requirements.txt # Option B: Modern uv (Recommended) uv sync
-
Configure environment:
cp .env.example .env # Edit .env with your CRM and LLM credentials
Usage
1. Process Emails (.eml)
Run the automator on a single EML file or an entire directory recursively.
Using uvx (Fastest, zero-install):
uvx eml/eml_automator.py "path/to/email.eml" --env-file ".env"
Using a directory:
uv run python eml/eml_automator.py "path/to/directory" --env-file ".env"
Options:
--force,-f: Force re-processing of an email even if it was already synced.--verbose,-v: Enable debug logs to see HTTP requests and LLM thought process.
2. Generic Agent Demo
See how the toolkit handles raw text (e.g., meeting transcripts):
python3 eml/agent_demo.py --api-key "your_key"
Architecture
graph TD
Ingest[Ingestion Layer] --> Intelligence[Intelligence Layer]
Intelligence <--> Search[Web Search Tool]
Intelligence --> Client[CRM Client]
Client --> CRM[(RealTimeX CRM)]
crm_client.py: The "hands" – handles all API calls with retries and 10s timeouts.intelligence.py: The "brain" – uses Pydantic models to extract structured data from text.persistence.py: The "memory" – prevents processing the same resource twice.
Built with ❤️ by the RealTimeX.ai Team
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file crm_automator-1.11.5.tar.gz.
File metadata
- Download URL: crm_automator-1.11.5.tar.gz
- Upload date:
- Size: 75.0 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.10.19
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
ce18ca82606a4cb67ef46196e69925c1df3347dd49b4ac784eb003d509d7ef05
|
|
| MD5 |
5dbbf1f04f2016254a9eb67d09e7b436
|
|
| BLAKE2b-256 |
f99a13621653d0585cf28d1da09b53651120b22c20a361a8fc4c115884a7cc20
|
File details
Details for the file crm_automator-1.11.5-py3-none-any.whl.
File metadata
- Download URL: crm_automator-1.11.5-py3-none-any.whl
- Upload date:
- Size: 87.1 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.10.19
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
62f7e90322e12bb3d979383fc106d343b0bbc6ed89b838cef6523ffc942c1dff
|
|
| MD5 |
f5af043f2811f999c2a69450177deea6
|
|
| BLAKE2b-256 |
380a4b46ae40afe470ce9b6e7043613b011ffbdd68b4f7070596fe34d0aa55c2
|