Best Tavily Alternative for RAG Pipeline Ingestion

EnConvert is a Tavily alternative for RAG pipeline ingestion that covers web pages, PDFs, DOCX, conversion, and summarisation behind one API and one schema

Get API key

A developer building a RAG pipeline needs an ingestion layer that handles the full input surface: web pages, PDFs, DOCX files, spreadsheets, and other document types, all returned as clean, structured, LLM-ready output. Tavily is a search and extraction tool. Its search endpoint returns ranked results with snippets, and its Extract, Crawl, and Map endpoints return page content from the web. That works well for query-time retrieval, but it does not cover file ingestion, document conversion, or the structured chunking a vector store needs at index time. When you need to ingest a PDF or convert a DOCX, you add a second tool, with its own key, schema, and failure modes. EnConvert is a REST API and MCP server with dedicated endpoints for web scraping, file ingestion, document conversion, and summarisation, all returning consistent LLM-ready output, so one ingestion layer covers the full RAG input surface without stitching tools together.

Example

python
import json
import os
import time

import requests
from langchain_core.documents import Document

ENCONVERT_API_KEY = os.environ["ENCONVERT_API_KEY"]
HEADERS = {"X-API-Key": ENCONVERT_API_KEY}

# Step 1: Upload the PDF and submit an ingestion job (the form field is "files")
with open("/path/to/your/report.pdf", "rb") as f:
    upload = requests.post(
        "https://api.enconvert.com/v2/ingest/files",
        headers=HEADERS,
        files={"files": ("report.pdf", f, "application/pdf")},
        timeout=60,
    )
upload.raise_for_status()
job_id = upload.json()["job_id"]

# Step 2: Poll until the job completes
while True:
    poll = requests.get(
        f"https://api.enconvert.com/v2/ingest/{job_id}",
        headers=HEADERS,
        timeout=30,
    )
    poll.raise_for_status()
    job = poll.json()
    if job["status"] == "completed":
        output_url = job["output_url"]
        break
    if job["status"] in ("failed", "canceled"):
        raise RuntimeError(job.get("error_message") or f"Ingest job {job['status']}")
    time.sleep(2)

# Step 3: Download the JSONL (a signed URL valid for 15 minutes; plain GET, no API key)
jsonl = requests.get(output_url, timeout=60)
jsonl.raise_for_status()

# Step 4: Load each chunk as a LangChain document
documents = []
for line in jsonl.content.decode("utf-8").split("\n"):
    if not line.strip():
        continue
    chunk = json.loads(line)
    metadata = chunk["metadata"]
    # headings_path is a list; most vector stores accept only scalar metadata values
    metadata["headings_path"] = " > ".join(metadata["headings_path"])
    documents.append(Document(page_content=chunk["content"], metadata=metadata))

print(f"Loaded {len(documents)} chunks ready for embedding")

# vector_store.add_documents(documents)

What you get back

Capability

EnConvert

Tavily

Web page extraction

Perceive: any URL to clean Markdown, including JavaScript-rendered pages; Ingest also accepts URL lists, sitemaps, and website crawls returning the same JSONL chunk schema as file ingestion

Confirmed: Extract returns page content as Markdown or text; Crawl and Map for site traversal

File ingestion (PDF, DOCX, XLSX)

Confirmed: Ingest accepts PDF, DOCX, XLSX, CSV, Markdown, and plain text; chunks split at H1 to H3 boundaries, 512 word soft cap, tables and code blocks kept whole

Not documented as a file upload ingestion pipeline

Document conversion

Confirmed: Convert covers 45+ conversion routes across documents, images, and data formats

Not documented

RAG-ready chunked output

Ingest returns chunks split at H1 to H3 heading boundaries, 512 word default soft cap, tables and code blocks kept whole even when they exceed the cap; each chunk carries headings_path, section, chunk_index, and word_count

Not documented: no equivalent index-time file ingestion pipeline producing chunked JSONL

Summarisation endpoint

Distill: any URL or file to a clean summary in one call

Not documented as a dedicated URL or file summarisation endpoint

MCP server

Native, exposes full ingestion toolkit as MCP tools

Confirmed: official hosted remote MCP server for search and retrieval tools

Free tier

500 ops per month, no card required

1,000 credits per month

WHY ENCONVERT FOR RAG PIPELINES

A dedicated ingestion layer means EnConvert handles the full input surface at index time and returns the same structured output for every document type. Web pages and files go through one API and arrive in one schema, so the code that loads your vector store does not branch by source type. You do not combine a search tool with separate file parsers and your own chunking logic.

Get free API key — 500 ops per month, no card required.