TextLens API

You need readability, sentiment, and keyword extraction. That's 3 Python packages, model downloads, and cold starts your lambda can't absorb. One API call returns all of it in under 50ms — no model to host, no GPU required.

★ Featured in DataTalks.Club OSS Spotlight — March 2026

From the team behind textlens — 96 npm downloads/week · 6 GitHub stars

1,000 requests/month free at launch — no credit card, ever

Try the live demo →

curl -X POST https://api.ckmtools.dev/v1/analyze \
  -H "X-API-Key: your_api_key" \
  -H "Content-Type: application/json" \
  -d '{"text": "Your text here..."}'

API Reference

What you get

8 Readability Formulas

Flesch, Flesch-Kincaid, Coleman-Liau, ARI, Gunning Fog, SMOG, Dale-Chall, Linsear Write.

Sentiment Analysis

Positive, negative, or neutral with confidence score.

Keyword Extraction

Top keywords ranked by TF and length weighting.

Keyword Density

Unigram, bigram, and trigram frequency analysis.

SEO Scoring

Composite score with actionable suggestions.

Fast

Sub-50ms response times. Pure algorithmic, no ML cold starts.

Code examples

curl -X POST https://api.ckmtools.dev/v1/analyze \
  -H "X-API-Key: $API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"text": "The quick brown fox jumps over the lazy dog."}'
import pandas as pd, requests

df = pd.read_csv('reviews.csv')

def analyze(text):
    r = requests.post('https://api.ckmtools.dev/v1/analyze',
        headers={'X-API-Key': 'your_api_key'},
        json={'text': text, 'options': {'modules': ['sentiment', 'keywords']}})
    return r.json()

df['sentiment'] = df['review_text'].apply(lambda t: analyze(t)['sentiment']['label'])
const response = await fetch('https://api.ckmtools.dev/v1/analyze', {
  method: 'POST',
  headers: {
    'X-API-Key': 'your_api_key',
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({ text: 'Your text here...' }),
});
const result = await response.json();
console.log(`Readability grade: ${result.readability.consensusGrade}`);
require 'net/http'
require 'json'

uri = URI('https://api.ckmtools.dev/v1/analyze')
http = Net::HTTP.new(uri.host, uri.port)
http.use_ssl = true
req = Net::HTTP::Post.new(uri, 'X-API-Key' => 'your_api_key', 'Content-Type' => 'application/json')
req.body = { text: 'Your text here...' }.to_json
res = http.request(req)
puts JSON.parse(res.body)

Sample response

{
  "statistics": {
    "words": 156,
    "sentences": 8,
    "paragraphs": 3
  },
  "readability": {
    "fleschReadingEase": { "score": 65.2, "grade": 8, "interpretation": "Standard" },
    "consensusGrade": 8
  },
  "sentiment": {
    "score": 0.23,
    "label": "positive",
    "confidence": 0.67
  },
  "keywords": [
    { "word": "analysis", "score": 4.2, "count": 3, "density": 1.92 }
  ],
  "meta": {
    "characters": 892,
    "processing_time_ms": 12
  }
}

Switching from a Python library? See textstat vs TextLens API →

Also comparing: TextBlob vs TextLens API

Also comparing: VADER vs TextLens API

Also comparing: spaCy vs TextLens API

Also comparing: NLTK vs TextLens API

Switching from AWS? TextLens API vs AWS Comprehend →

Using Azure? TextLens API vs Azure Text Analytics →

Using Google Cloud? TextLens API vs Google Cloud NL API →

See all Python library comparisons →

Using Ruby? See Ruby-specific examples →

Using Go? See Go-specific examples →

Using Python? See Python-specific examples →

Using PHP? See PHP-specific examples →

Using Java? See Java-specific examples →

Data engineer? See pandas/DataFrame examples →

Built for data pipelines

Process text columns at scale. No model to deploy. No GPU to manage. Drop TextLens into your pipeline in 5 minutes.

import pandas as pd, requests

df = pd.read_csv('reviews.csv')

def analyze(text):
    r = requests.post('https://api.ckmtools.dev/v1/analyze',
        headers={'X-API-Key': 'your_api_key'},
        json={'text': text, 'options': {'modules': ['sentiment', 'keywords']}})
    return r.json()

df['sentiment'] = df['review_text'].apply(lambda t: analyze(t)['sentiment']['label'])

No GPU required. Pure algorithmic — sub-50ms per call. Same input always returns same output.

Join the Waitlist

No model to deploy. No GPU to manage. Drop TextLens into your data pipeline in 5 minutes — 1,000 free requests, no credit card.

$0 — no credit card required

Pricing

AWS Comprehend charges ~$0.50 per 1,000 requests. TextLens Pro is $29/mo for 100,000 requests — 17× cheaper for typical NLP workloads.

Free

$0 /mo
  • 1,000 requests/mo
  • 10 req/min rate limit
  • 5,000 char max per request
Get Started

Starter

$9 /mo
  • 25,000 requests/mo
  • 60 req/min rate limit
  • 25,000 char max per request
Join Waitlist

Enterprise

$99 /mo
  • 500,000 requests/mo
  • 300 req/min rate limit
  • 500,000 char max per request
Join Waitlist

Get Early Access

Join the waitlist to be first to receive a free API key (1,000 requests/month) at launch.

$0 — no credit card required

API reference

POST /v1/analyze

Analyze text content. Auth: X-API-Key header. Body: {"text": "...", "options": {"modules": [...]}}

Available modules: readability, sentiment, keywords, density, seo. Omit modules to run all.

GET /v1/usage

Current month usage and remaining quota. Auth: X-API-Key header.

GET /v1/health

Service health status. No authentication required.

Error codes

CodeDescription
400Invalid request body or missing text field
401Missing or invalid API key
429Rate limit exceeded
500Internal server error