Jev Bulk Classifier (TypeSafe AI System One) avatar

Jev Bulk Classifier (TypeSafe AI System One)

Pricing

$0.50 / 1,000 classified items

Go to Apify Store
Jev Bulk Classifier (TypeSafe AI System One)

Jev Bulk Classifier (TypeSafe AI System One)

Bulk-classify texts or any Actor's dataset with TypeSafe AI's Jev: routing, sentiment, lead scoring and yes/no checks with calibrated confidence. Presets for Google Maps, LinkedIn, social media, reviews and job scrapers. Bring your own Jev key. $0.50 per 1,000 items.

Pricing

$0.50 / 1,000 classified items

Rating

0.0

(0)

Developer

Sameh George Jarour

Sameh George Jarour

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

6 hours ago

Last modified

Categories

Share

What does Jev Bulk Classifier do?

Jev Bulk Classifier is an API wrapper for TypeSafe AI's Jev, the first "System One" model. You give it a list of texts or JSON records and a set of typed questions, and it returns a calibrated classification, score or yes/no probability for every item. It is a fast, cheap alternative to prompting an LLM for classification: Jev returns typed decisions with confidence instead of free text, so there is nothing to parse and no hallucinated labels.

It does not generate text, summaries or code. Use it for triage, routing, tagging, sentiment and rubric scoring at scale.

Point it at the dataset of any other Actor (Google Maps Scraper, LinkedIn scrapers, Instagram or TikTok scrapers, Amazon Reviews Scraper, company enrichment tools) and pick a ready-made question preset, or paste your own items and questions.

Why use Jev Bulk Classifier?

  • Fast and cheap. Jev answers in roughly 70–500 ms per item and charges $0.042 per million input tokens. Output tokens are free. Classifying 10,000 short support tickets with three questions costs well under a dollar in Jev tokens.
  • 🎯 Calibrated confidence. Every answer carries probabilities and a confidence score, so you can auto-accept confident answers and route uncertain ones to a human.
  • 🧩 Three question types in one call. Ask any mix of choice, score and noul (yes/no) questions. Jev evaluates all of them against each item in parallel, so extra questions cost tokens but almost no time.
  • 🔗 Works on other Actors' datasets. Pass one or more dataset IDs, choose which fields to send, and every result row points back to the source dataset and offset.
  • 🧠 Presets for popular scrapers. Google Maps reviews and places, LinkedIn profiles, company enrichment, social media posts and comments, product reviews, job postings, support tickets. Pick one and go.
  • 🔁 Bulk processing with retries. Bounded concurrency, exponential backoff on rate limits, per-item error recording, and resume after platform migrations.
  • ☁️ Apify platform benefits. Schedule runs, call it from the API, chain it after any scraper, export to CSV, Excel or JSON, and push results to Google Sheets, Slack or webhooks via integrations.

What data does Jev Bulk Classifier output?

One dataset row per input item.

FieldTypeDescription
indexintegerPosition of the item in the combined list (inline items first, then dataset items).
sourceobject{type, datasetId, offset}: where the item came from, for joining back to the source dataset.
statePreviewstringFirst 200 characters of the item.
resultsobjectFlat answer per question id: chosen label, expected score, or yes-probability.
confidenceobjectConfidence 0–1 per question id.
answersobjectRaw Jev answers with full probability distributions and score legend.
modelstringVersioned model that answered, for example jev-1.13.0.
inputTokensintegerTokens billed by TypeSafe for this item.
estimatedCostUsdnumberinputTokens × 0.042 / 1,000,000.
chargedbooleanWhether the item was billed. Failed items are never charged.
errorobject or nullError class, HTTP status and message if the item failed.

A SUMMARY record in the run's key-value store reports totals: items processed, succeeded, failed, total tokens and estimated Jev cost.

How to classify texts with Jev

  1. Get a TypeSafe AI API key at console.typesafe.ai. Jev is currently in early access.
  2. Open the Actor in Apify Console and paste the key into TypeSafe AI API key. It is stored encrypted and never written to logs.
  3. Paste your Items to classify: a JSON array of strings or objects. Objects with named fields such as {"subject": ..., "body": ...} usually classify better than concatenated text.
  4. Define your Questions. Each key is a question id and each value is a Jev question:
    • choice picks one label. criteria maps each label to a short description (up to 255 labels).
    • score rates against an ordered rubric. criteria is an array of 2–10 level descriptions from lowest to highest.
    • noul answers yes or no. criteria is optional and may describe the true and false outcomes.
  5. Click Start. Watch the status line for progress, token usage and cost.
  6. Open the Output tab or download the dataset. The results column gives you one value per question; answers has the full distributions.

How to classify another Actor's dataset

  1. Run any scraper, for example Google Maps Reviews Scraper, and copy its dataset ID from the run's Storage tab.
  2. In this Actor, put the ID into Dataset IDs. You can list several.
  3. Set Dataset fields to send to the fields Jev should read, for example text, stars, title. This matters: a full Google Maps place record can be thousands of tokens, while the review text is a few dozen. Dot notation such as authorMeta.name works. Items with none of the fields are skipped.
  4. Pick a Question preset (table below) or write your own questions.
  5. Optionally set Max dataset items to try the questions on a sample first.
  6. Run. Each output row has source.datasetId and source.offset, so you can join results back to the original items, or simply export both datasets and merge on offset.

To automate this, add the classifier as the next step in an Apify integration or call it from the API with the finished run's defaultDatasetId.

PresetBuilt forQuestionsFields to send
support-ticketsHelpdesk exports, contact forms, inbound emaildepartment (choice), frustration (score), is_urgent (yes/no)subject, body
google-maps-reviewsGoogle Maps Reviews Scraper, Google Maps Scraper reviewssentiment (score), main_topic (choice), is_complaint, actionable_feedback, would_returntext, stars, title
google-maps-leadsGoogle Maps Scraper places, for outreach listsbusiness_size (score), customer_type (B2B/B2C), is_independent, has_website, online_presence (score)title, categoryName, description, website, reviewsCount, totalScore
linkedin-profilesLinkedIn profile scrapersseniority (choice), department (choice), is_decision_maker, is_technical, open_to_opportunitiesheadline, summary, jobTitle, companyName, experience
company-enrichmentLinkedIn Company, Crunchbase, website scraperscompany_size (score), business_model (choice), sells_to (B2B/B2C), is_startup, is_tech_companyname, description, industry, employeeCount, website
social-media-postsInstagram, TikTok, Facebook, X, YouTube post scraperssentiment (score), content_type (choice), is_sponsored, has_call_to_action, is_brand_safecaption, text, hashtags
social-media-commentsComment scrapers for any networksentiment (score), intent (choice), needs_reply, is_spam, is_toxictext
product-reviewsAmazon Reviews Scraper, e-commerce review scraperssentiment (score), main_topic (choice), mentions_defect, would_recommend, is_suspiciousreviewTitle, reviewDescription, ratingScore
job-postingsLinkedIn Jobs, Indeed and other job scrapersseniority (choice), work_arrangement (choice), employment_type (choice), requires_degree, salary_disclosed, is_technical_roletitle, description, location, employmentType

Field names differ between scrapers; check one item of your dataset and adjust. A preset is a starting point: to change the labels or add a question, copy the preset's questions from the run log into the Questions field and switch the preset to Custom.

How much does it cost to classify with Jev?

You pay two parties, and both charges are tiny:

  • Apify (this Actor) bills $0.50 per 1,000 classified items ($0.0005 each) with pay-per-event pricing. Only items that Jev successfully classified are charged. Failed items, retries and the run itself are free. You can cap any run with Maximum cost per run in the run options; the Actor stops cleanly when the cap is reached, keeps every result produced so far, and tells you how many items are left.
  • TypeSafe AI bills Jev tokens to your own key at $0.042 per million input tokens. A 300-token message with the three example questions uses about 470 input tokens, or roughly $0.00002. Ten thousand such items cost about $0.20. Output tokens are free.

So classifying 10,000 support tickets with three questions costs about $5 on Apify plus $0.20 on TypeSafe. The SUMMARY record and the per-item estimatedCostUsd and charged fields report actual usage, so you never have to guess.

Input

See the Input tab for all options. Minimal example:

{
"apiKey": "YOUR_TYPESAFE_API_KEY",
"items": [
"Hi, I've been trying to connect my Stripe account for 3 days and the integration keeps failing. I'm losing sales. Please help ASAP.",
{ "subject": "Invoice question", "body": "Can you send me the invoice for August? No rush." },
"How much does the enterprise plan cost for 50 seats?"
],
"questions": {
"department": {
"type": "choice",
"instructions": "Which team should handle this message?",
"criteria": {
"billing": "Payments, invoicing, refunds, subscription charges",
"technical": "Bugs, outages, integrations, errors",
"sales": "Pricing, upgrades, new accounts, plan questions"
}
},
"frustration": {
"type": "score",
"instructions": "How frustrated does the customer appear?",
"criteria": ["Calm, just stating facts", "Frustrated but civil", "Very angry, strong language"]
},
"is_urgent": {
"type": "noul",
"instructions": "Does the message convey urgency or time-sensitivity?",
"criteria": { "true": "Explicitly time-sensitive or blocking", "false": "No urgency expressed" }
}
}
}

Dataset example with a preset:

{
"apiKey": "YOUR_TYPESAFE_API_KEY",
"datasetIds": ["Sn7qAbnhkKIzqlJRa"],
"datasetFields": ["text", "stars", "title"],
"preset": "google-maps-reviews",
"maxItems": 500
}

Optional fields: preset (default custom), datasetFields, maxItems (default 0 = all), model (jev-latest, jev-preview or a pinned version such as jev-1.13.0), concurrency (default 10), maxRetries (default 5), requestTimeoutSecs (default 60), failOnError (default false) and includeRawResponse (default false). When a preset is selected, the questions field is ignored.

The questions object is passed to Jev unchanged, so anything the TypeSafe API reference accepts works here. The Actor validates the structure before spending any tokens and reports the exact field that is wrong.

Output

You can download the dataset in various formats such as JSON, CSV, Excel or HTML. In CSV and Excel exports, nested fields flatten to columns such as results.department and confidence.is_urgent.

Successful item:

{
"index": 0,
"source": { "type": "inline", "offset": 0 },
"statePreview": "Hi, I've been trying to connect my Stripe account for 3 days and the integration keeps failing. I'm losing sales. Please help ASAP.",
"results": { "department": "technical", "frustration": 1.0, "is_urgent": 0.98 },
"confidence": { "department": 0.95, "frustration": 1.0, "is_urgent": 0.98 },
"answers": {
"department": { "type": "choice", "choice": "technical", "confidence": 0.95, "probabilities": { "technical": 0.97, "sales": 0.0, "billing": 0.03 } },
"frustration": { "type": "score", "score": 1.0, "confidence": 1.0, "legend": { "0": "Calm, just stating facts", "1": "Frustrated but civil", "2": "Very angry, strong language" }, "probabilities": { "0": 0.0, "1": 1.0, "2": 0.0 } },
"is_urgent": { "type": "noul", "noul": 0.98 }
},
"model": "jev-1.13.0",
"inputTokens": 472,
"outputTokens": 73,
"estimatedCostUsd": 0.000019824,
"durationMs": 412,
"charged": true,
"error": null
}

Failed item (run continues unless failOnError is on):

{
"index": 7,
"source": { "type": "dataset", "datasetId": "Sn7qAbnhkKIzqlJRa", "offset": 4 },
"statePreview": "...",
"results": {},
"confidence": {},
"answers": {},
"model": null,
"inputTokens": null,
"estimatedCostUsd": null,
"durationMs": 31250,
"charged": false,
"error": { "type": "RateLimitError", "status": 429, "message": "429 Too Many Requests", "retryable": true, "requestId": "req_01..." }
}

Tips for better Jev classifications

  • Describe every option. Jev reads the criteria descriptions literally. Two or three concrete phrases per label beat a single word.
  • Put shared context in instructions, not in each item. Instructions are sent with every call anyway, and keeping items short lowers token cost.
  • Use structured items. An object such as {"subject": ..., "body": ..., "customer_tier": ...} lets you ask questions about specific fields.
  • Threshold on confidence. Auto-apply answers above 0.9 and queue the rest for review. Pin a versioned model such as jev-1.13.0 once you tune thresholds so results stay stable.
  • Turn up concurrency for big batches. Jev allows roughly 1,200 requests per minute. Concurrency 20–30 is fine for short items; if you see RateLimitError rows, lower it or raise maxRetries.
  • Chain Actors. Run a scraper first, then pass its dataset ID in datasetIds. Always set datasetFields; whole scraper records are large and Jev only needs the text.

Limitations

  • Text only. No images, audio or video.
  • No generation. Jev never writes text; it only picks, scores or judges.
  • Literal reading. Negations and scoping words are taken at face value. It does not count, do arithmetic or compare dates as quantities.
  • One item per call. There is no batch endpoint, so cost scales with items × tokens. All questions for an item share one call.
  • Size limits. Up to 255 choice options, 2–10 score levels, ~32k tokens per item plus the longest question, 64k tokens total per call.
  • Untrusted input can steer answers. Jev does not treat item text as hostile. If items come from end users, keep decision-critical rules in instructions.

FAQ

Is my TypeSafe API key safe?

Yes. The apiKey field is a secret input: Apify stores it encrypted, masks it in the Console and the Actor never logs it. Logging goes through Apify's logger, which additionally censors credential-like strings. The key is used only to call api.typesafe.ai.

Why did the run fail with a 422 or 400 error?

Jev rejected the request structure, almost always because of the questions definition: a choice without criteria, a score with fewer than two levels, or an unknown type. The Actor validates these locally first, so a 422 that gets through usually means a field Jev supports that the local check does not know about. The error message names the exact field path.

Why is confidence low?

Low confidence means the probability mass is spread across options. Usually the option descriptions overlap or the item genuinely fits several labels. Sharpen the descriptions, split ambiguous labels, or add a noul question that isolates the ambiguous property.

Can I use this without an Apify account?

No. The Actor runs on the Apify platform. You do need your own TypeSafe AI key; the Actor never uses a shared key.

What happens to my data?

Items are sent to TypeSafe AI for evaluation and results are stored in your Apify dataset under your account's retention settings. Do not send personal or sensitive data unless you have a lawful basis to process it and have reviewed TypeSafe AI's terms. You are responsible for the content you classify.

Support

Found a bug or want another preset? Open a ticket in the Issues tab. For programmatic use, see the API tab, which shows ready-made code for Node.js, Python and curl.