Developer Platform & Integrations

Free, CORS-enabled REST endpoints, RSS 2.0 syndication, and zero-cost Telegram alert bots. Power your Discord channels, university job boards, and automated trackers with direct career portal feeds.

REST Endpoints
6 Regions
JSON & RSS formats
Authentication
0 Keys
100% free & open CORS
Sync Cadence
Daily 24h
Direct official ATS sync
Telegram Bot
< 35 MB
Runs on any $1 VPS
Documentation & Setup

InternScan API, Bot & Integration Hub

Choose your integration method below: deploy our ultra-lightweight Telegram bot on a tiny VPS, poll our free REST/RSS endpoints, or use GitHub Actions for 100% zero-server scheduled alerts.

GET https://internscan.vercel.app/api/active.json

All Active Jobs (Global): Clean JSON array of all verified active software and tech internships worldwide, sorted newest first.

GET https://internscan.vercel.app/api/latest.json

Today's New Sync (Diff): Returns newly discovered and reopened internships from the latest daily sync cycle. Ideal for polling bots.

{
  "updated_at": "2026-10-15T03:00:00Z",
  "new_count": 5,
  "reopened_count": 1,
  "total_active": 128,
  "new_jobs": [
    {
      "company": "Google",
      "title": "Software Engineering Intern, Summer 2027",
      "url": "https://www.google.com/about/careers/...",
      "city_tag": "Bengaluru",
      "category": "Software",
      "posted": "2026-10-14"
    }
  ]
}

๐ŸŒ Dedicated Regional Endpoints

Query regional JSON datasets directly without client-side filtering:

๐Ÿ‡ฎ๐Ÿ‡ณ India: /in/api/active.json & /in/api/latest.json
๐Ÿ‡บ๐Ÿ‡ธ United States: /us/api/active.json & /us/api/latest.json
๐Ÿ‡จ๐Ÿ‡ฆ Canada: /ca/api/active.json & /ca/api/latest.json
๐Ÿ‡ฌ๐Ÿ‡ง United Kingdom: /uk/api/active.json & /uk/api/latest.json
๐Ÿ‡ช๐Ÿ‡บ Europe: /eu/api/active.json & /eu/api/latest.json
๐Ÿ“Š Metrics: /metrics.json (Counts across all countries)
RSS 2.0 https://internscan.vercel.app/feed.xml

Standard RSS 2.0 feed. Connect directly to no-code Telegram bots, Discord webhooks, or Slack with zero programming.

๐Ÿ’ป Python Example

import requests
data = requests.get("https://internscan.vercel.app/api/latest.json").json()
for job in data.get("new_jobs", []):
    print(f"[{job['company']}] {job['title']} -> {job['url']}")

โšก JavaScript (Fetch)

const res = await fetch("https://internscan.vercel.app/api/latest.json");
const { new_jobs } = await res.json();
console.log(`Found ${new_jobs.length} new openings!`);
1

Deploy on Any $1/mo Nano Node or Linux VPS (<35 MB RAM)

Our bot script is built with pure Python 3 using standard libraries, requiring less than 15% of a 256MB RAM server.

git clone https://github.com/vishnunandan555/internscan.git
cd internscan/bot
pip install -r requirements.txt
cp .env.example .env && nano .env
python3 main.py
2

Configure Credentials in .env

Create a bot in 30 seconds via @BotFather on Telegram, add it to your channel as an Admin, and paste your values:

TELEGRAM_BOT_TOKEN=7123456789:AAHfkj...
TELEGRAM_CHAT_ID=@my_internships_channel
POLL_INTERVAL_SECONDS=1800
3

Keep Running 24/7 with systemd

Use the pre-packaged service unit so your bot boots automatically on server restart:

sudo cp internscan-bot.service /etc/systemd/system/
sudo systemctl daemon-reload
sudo systemctl enable --now internscan-bot
sudo systemctl status internscan-bot

๐Ÿ’ฌ Interactive Bot Commands

Users in your group can message: /latest (new roles today), /active (all verified roles), /status (health check & memory).

๐Ÿ“– Full Hosting Guide

Read detailed deployment instructions and troubleshooting in bot/README_bot.md on GitHub →

1

Fork the Repository

Fork vishnunandan555/internscan to your personal GitHub account.

2

Set Repository Action Secrets

In your forked repo: Navigate to Settings → Secrets and variables → Actions and add two secrets:

  • TELEGRAM_BOT_TOKEN: Bot token from @BotFather
  • TELEGRAM_CHAT_ID: Channel username (e.g. @my_channel) or chat ID
3

Automated Push with Zero Server Costs

Your GitHub Actions workflow will execute automatically on schedule. When any new internship appears, it immediately pushes the notification to your Telegram chat!

๐Ÿ›ก๏ธ Inviolable Data Invariants

  • Jobs are NEVER deleted: When an employer fills a role, it is set to active: false and timestamped with closed. Records are permanently retained to track posting flapping.
  • Stable Unique Identifiers (UIDs): Every posting has a stable uid = "{company_slug}:{external_id}" derived from the employer's official ATS requisition number.
  • Atomic Writes: All persistent databases write to temporary files first with POSIX atomic replacement to prevent corrupt reads.
// Single Job Schema
{
  "uid": "google:123456789",
  "company": "Google",
  "title": "Software Engineering Intern, Summer 2027",
  "url": "https://www.google.com/about/careers/applications/jobs/results/...",
  "locations": ["Bengaluru, Karnataka, India"],
  "city_tag": "Bengaluru",
  "category": "Software",
  "first_seen": "2026-10-12",
  "last_seen": "2026-10-15",
  "active": true,
  "closed": null,
  "source": "api"
}

InternScan Logo About InternScan Platform Architecture

Direct ATS Synchronization

Positions are fetched directly from Workday, Greenhouse, SmartRecruiters, Lever, Oracle HCM, Eightfold, and custom corporate APIs every 3 hours.

Strict Memory Budget (< 35 MB RAM)

Both our scrapers and bot engine avoid heavy frameworks or headful browsers. Pure Python standard libraries ensure instant cold starts and minimal resource consumption.

Zero Fluff & Verified Engineering Roles

Rule-based categorization categorizes roles into Software, AI/ML, Data Engineering, Silicon/Hardware, Cloud/Infra, Mobile, and Security buckets.

100% Free & Open Source (MIT)

The entire scraping engine, database, website, and Telegram bot are licensed under MIT. Contributions and new company adapters are welcomed on GitHub.

Link copied to clipboard