𝘼𝙗𝙝𝙞𝙜𝙮𝙖𝙣 𝙏𝙤𝙤𝙡𝙨 𝙇𝙖𝙗
Open in Telegram
Personal research tools • APIs • bots Updates • demos • limited access drops Not for illegal use
Show moreThe country is not specifiedThe category is not specified
1 043
Subscribers
+4924 hours
+3147 days
+64330 days
Posts Archive
1 044
Repost from N/a
flask>=3.0
phonenumbers>=8.13
pycountry>=23.12
requests>=2.31
beautifulsoup4>=4.12
lxml>=5.0
1 044
Repost from N/a
@app.get("/phone")
def phone_info():
"""
GET /phone?number=+919876543210
Returns full phone number intelligence as JSON.
"""
raw = request.args.get("number", "").strip()
if not raw:
return jsonify({"error": "Missing 'number' query parameter. Example: /phone?number=+919876543210"}), 400
result = {"query": raw}
# 1. Parse & validate
parsed_info = parse_and_validate(raw)
if not parsed_info["valid"]:
result["valid"] = False
result["possible"] = parsed_info.get("possible", False)
result["error"] = parsed_info.get("error", "Invalid phone number")
return jsonify(result), 422
parsed = parsed_info["parsed"]
result["valid"] = True
result["possible"] = parsed_info["possible"]
# 2. Formats
result["formats"] = get_formats(parsed)
e164 = result["formats"]["e164"]
# 3. Line type
result.update(get_line_type(parsed))
# 4. Carrier
result.update(get_carrier_info(parsed))
# 5. Country info
result["country"] = get_country_info(parsed)
# 6. Geo + timezone
result["geo"] = get_geo_info(parsed)
# 7. Spam checks
result["spam_check"] = {
"spamcalls": check_spam_spamcalls(e164),
"shouldianswer": check_spam_shouldianswer(e164),
}
return jsonify(result), 200
# ── Entry point ───────────────────────────────────────────────────────────────
if name == "main":
app.run(debug=True, port=5000)
1 044
Repost from N/a
try:
country = pycountry.countries.get(alpha_2=region_code)
if country:
info["country_name"] = country.name
info["official_name"] = getattr(country, "official_name", None)
info["alpha_3"] = country.alpha_3
info["numeric_code"] = country.numeric
except Exception:
pass
return info
def get_line_type(parsed) -> dict:
"""Classify the number type (mobile, fixed, VoIP, etc.)."""
ntype = number_type(parsed)
return {"line_type": LINE_TYPE_MAP.get(ntype, "Unknown")}
def check_spam_spamcalls(e164: str) -> dict:
"""
Scrape SpamCalls.net for community spam/scam reports.
Free public site, no key required.
"""
# Strip leading + for URL
digits = e164.lstrip("+")
url = f"https://spamcalls.net/en/number/{digits}"
try:
resp = requests.get(url, headers=BROWSER_HEADERS, timeout=12)
if resp.status_code != 200:
return {"error": f"SpamCalls returned HTTP {resp.status_code}"}
soup = BeautifulSoup(resp.text, "lxml")
result = {"source": url}
# Rating / danger level
danger = soup.select_one(".danger-level, .rating-label, [class*='danger'], [class*='rating']")
if danger:
result["danger_level"] = danger.get_text(strip=True)
# Report count
count_el = soup.find(string=re.compile(r"\d+\s*(report|complaint)", re.I))
if count_el:
m = re.search(r"(\d+)", count_el)
result["report_count"] = int(m.group(1)) if m else None
# Page title often has "spam" or "safe"
title = soup.title.string if soup.title else ""
result["page_title"] = title.strip() if title else None
# Caller type label
caller_type = soup.select_one(".caller-type, [class*='caller-type'], [class*='type-label']")
if caller_type:
result["caller_type"] = caller_type.get_text(strip=True)
# Latest comments / reports
comments = []
for el in soup.select(".comment-text, .report-text, [class*='comment'], [class*='report-body']")[:5]:
text = el.get_text(strip=True)
if text:
comments.append(text)
if comments:
result["recent_reports"] = comments
return result
except requests.exceptions.Timeout:
return {"error": "SpamCalls request timed out"}
except Exception as e:
return {"error": str(e)}
def check_spam_shouldianswer(e164: str) -> dict:
"""
Scrape ShouldIAnswer.com for spam reports.
Another free public lookup — good secondary source.
"""
digits = e164.lstrip("+")
url = f"https://www.shouldianswer.com/phone-number/{digits}"
try:
resp = requests.get(url, headers=BROWSER_HEADERS, timeout=12)
if resp.status_code != 200:
return {"error": f"ShouldIAnswer returned HTTP {resp.status_code}"}
soup = BeautifulSoup(resp.text, "lxml")
result = {"source": url}
# Overall rating
rating = soup.select_one(".overall-rating, .rating, [class*='rating']")
if rating:
result["rating"] = rating.get_text(strip=True)
# Number of ratings/opinions
opinions = soup.find(string=re.compile(r"\d+\s*(opinion|rating|report)", re.I))
if opinions:
m = re.search(r"(\d+)", opinions)
result["opinion_count"] = int(m.group(1)) if m else None
# Activity type
activity = soup.select_one("[class*='activity'], [class*='type']")
if activity:
result["activity_type"] = activity.get_text(strip=True)
return result
except requests.exceptions.Timeout:
return {"error": "ShouldIAnswer request timed out"}
except Exception as e:
return {"error": str(e)}
# ── Route ─────────────────────────────────────────────────────────────────────
1 044
Repost from N/a
"""
Phone Number Info API - Flask
─────────────────────────────
GET /phone?number=+919876543210
Checks (all free, no paid API keys):
- Parse & validate : phonenumbers (Google libphonenumber)
- Carrier detection : phonenumbers.carrier
- Timezone : phonenumbers.timezone
- Geocoding / region : phonenumbers.geocoder
- Line type : phonenumbers.number_type
- Country info : pycountry
- Format variants : E164, national, international, RFC3966
- Spam / scam reports : SpamCalls.net public search (scrape)
- Reverse lookup hint : sync.me public search (scrape)
Install:
pip install flask phonenumbers pycountry requests beautifulsoup4 lxml
"""
import re
import phonenumbers
from phonenumbers import (
carrier, geocoder, timezone,
number_type, PhoneNumberType,
format_number, PhoneNumberFormat,
is_valid_number, is_possible_number,
parse as ph_parse, NumberParseException,
)
import pycountry
import requests
from bs4 import BeautifulSoup
from flask import Flask, jsonify, request
app = Flask(name)
BROWSER_HEADERS = {
"User-Agent": (
"Mozilla/5.0 (Windows NT 10.0; Win64; x64) "
"AppleWebKit/537.36 (KHTML, like Gecko) "
"Chrome/124.0.0.0 Safari/537.36"
),
"Accept-Language": "en-US,en;q=0.9",
"Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8",
}
# ── Line type mapping ─────────────────────────────────────────────────────────
LINE_TYPE_MAP = {
PhoneNumberType.FIXED_LINE: "Fixed Line",
PhoneNumberType.MOBILE: "Mobile",
PhoneNumberType.FIXED_LINE_OR_MOBILE: "Fixed Line or Mobile",
PhoneNumberType.TOLL_FREE: "Toll Free",
PhoneNumberType.PREMIUM_RATE: "Premium Rate",
PhoneNumberType.SHARED_COST: "Shared Cost",
PhoneNumberType.VOIP: "VoIP",
PhoneNumberType.PERSONAL_NUMBER: "Personal Number",
PhoneNumberType.PAGER: "Pager",
PhoneNumberType.UAN: "UAN",
PhoneNumberType.VOICEMAIL: "Voicemail",
PhoneNumberType.UNKNOWN: "Unknown",
}
# ── Helpers ───────────────────────────────────────────────────────────────────
def parse_and_validate(number: str) -> dict:
"""Parse number with phonenumbers (Google libphonenumber)."""
try:
# Try with explicit +, then fallback to no region
if not number.startswith("+"):
number = "+" + number
parsed = ph_parse(number, None)
except NumberParseException as e:
return {"valid": False, "error": str(e), "parsed": None}
valid = is_valid_number(parsed)
possible = is_possible_number(parsed)
return {
"valid": valid,
"possible": possible,
"parsed": parsed,
}
def get_formats(parsed) -> dict:
"""All standard format variants."""
return {
"e164": format_number(parsed, PhoneNumberFormat.E164),
"international": format_number(parsed, PhoneNumberFormat.INTERNATIONAL),
"national": format_number(parsed, PhoneNumberFormat.NATIONAL),
"rfc3966": format_number(parsed, PhoneNumberFormat.RFC3966),
}
def get_carrier_info(parsed) -> dict:
"""Carrier name (works best for mobile numbers)."""
name = carrier.name_for_number(parsed, "en")
return {"carrier": name if name else None}
def get_geo_info(parsed) -> dict:
"""Region / city geocode and timezone."""
region = geocoder.description_for_number(parsed, "en")
zones = list(timezone.time_zones_for_number(parsed))
return {
"region": region if region else None,
"timezones": zones,
}
def get_country_info(parsed) -> dict:
"""Full country details via pycountry."""
region_code = phonenumbers.region_code_for_number(parsed)
country_code = parsed.country_code
info = {
"country_code_calling": f"+{country_code}",
"region_code": region_code,
}
1 044
Repost from N/a
flask>=3.0
email-validator>=2.1
dnspython>=2.6
python-whois>=0.9
requests>=2.31
1 044
Repost from N/a
# 3. SMTP reachability (use first / highest-priority MX)
if mx["found"] and mx["records"]:
result["smtp_check"] = check_smtp(email, mx["records"][0]["host"])
else:
result["smtp_check"] = {"reachable": False, "error": "No MX records found"}
# 4. Disposable check
result["disposable"] = check_disposable(domain)
# 5. WHOIS
result["whois"] = get_whois_info(domain)
# 6. Gravatar
result["gravatar"] = get_gravatar(email)
# 7. Breach check (HIBP)
result["breaches"] = check_breaches(email)
return jsonify(result), 200
# ── Entry point ───────────────────────────────────────────────────────────────
if name == "main":
app.run(debug=True, port=5000)
1 044
Repost from N/a
return {
"registrar": _first(w.registrar),
"creation_date": str(_first(w.creation_date)) if w.creation_date else None,
"expiration_date": str(_first(w.expiration_date)) if w.expiration_date else None,
"country": _first(w.country),
"org": _first(w.org),
}
except Exception as e:
return {"error": str(e)}
def get_gravatar(email: str) -> dict:
"""Return Gravatar URL for the email (based on MD5 hash)."""
hashed = hashlib.md5(email.strip().lower().encode()).hexdigest()
url = f"https://www.gravatar.com/avatar/{hashed}?d=404&s=200"
try:
resp = requests.head(url, timeout=5)
has_avatar = resp.status_code == 200
except Exception:
has_avatar = None
return {
"hash": hashed,
"url": f"https://www.gravatar.com/avatar/{hashed}?s=200",
"has_avatar": has_avatar,
}
def check_breaches(email: str) -> dict:
"""
Check HaveIBeenPwned using the free unifiedsearch web endpoint.
No API key required.
URL: https://haveibeenpwned.com/unifiedsearch/{email}
Returns breach and paste data as provided by HIBP.
"""
encoded = requests.utils.quote(email, safe="")
url = f"https://haveibeenpwned.com/unifiedsearch/{encoded}"
headers = {
# Mimic a real browser to avoid bot-blocking
"User-Agent": (
"Mozilla/5.0 (Windows NT 10.0; Win64; x64) "
"AppleWebKit/537.36 (KHTML, like Gecko) "
"Chrome/124.0.0.0 Safari/537.36"
),
"Accept": "application/json",
"Referer": "https://haveibeenpwned.com/",
}
try:
resp = requests.get(url, headers=headers, timeout=15)
if resp.status_code == 404:
# HIBP returns 404 when no breaches found
return {"breached": False, "breach_count": 0, "paste_count": 0}
if resp.status_code != 200:
return {"error": f"HIBP returned HTTP {resp.status_code}"}
data = resp.json()
breaches = data.get("Breaches") or []
pastes = data.get("Pastes") or []
return {
"breached": len(breaches) > 0,
"breach_count": len(breaches),
"paste_count": len(pastes),
"breaches": [
{
"name": b.get("Name"),
"domain": b.get("Domain"),
"breach_date": b.get("BreachDate"),
"pwn_count": b.get("PwnCount"),
"data_classes": b.get("DataClasses", []),
"is_verified": b.get("IsVerified"),
"is_sensitive": b.get("IsSensitive"),
}
for b in breaches
],
"pastes": [
{
"source": p.get("Source"),
"date": p.get("Date"),
"count": p.get("EmailCount"),
}
for p in pastes
],
}
except requests.exceptions.Timeout:
return {"error": "HIBP request timed out"}
except Exception as e:
return {"error": str(e)}
# ── Route ────────────────────────────────────────────────────────────────────
@app.get("/email")
def email_info():
"""
GET /email?email=user@example.com
Returns a JSON object with full email intelligence.
"""
raw_email = request.args.get("email", "").strip()
if not raw_email:
return jsonify({"error": "Missing 'email' query parameter"}), 400
result = {"query": raw_email}
# 1. Syntax check
syntax = check_syntax(raw_email)
result["syntax"] = syntax
if not syntax["valid"]:
return jsonify(result), 422
email = syntax["normalized"]
domain = syntax["domain"]
result["email"] = email
result["domain"] = domain
# 2. MX records
mx = get_mx_records(domain)
result["mx_records"] = mx
1 044
Repost from N/a
"""
Email Info API - Flask
GET /email?email=user@example.com
Returns info about an email address using free services & Python modules:
- Syntax validation (email-validator)
- MX record lookup (dnspython)
- SMTP reachability check (smtplib)
- Disposable email detection (disposable-email-domains list)
- Domain WHOIS info (python-whois)
- Gravatar avatar hash (hashlib)
- Email breach check via HaveIBeenPwned public API (requests)
Install dependencies:
pip install flask email-validator dnspython python-whois requests
"""
import hashlib
import smtplib
import socket
import re
import dns.resolver
import whois
import requests
from flask import Flask, jsonify, request
from email_validator import validate_email, EmailNotValidError
app = Flask(name)
# ── Disposable domain list (fetched once from a free public source) ──────────
DISPOSABLE_DOMAINS: set[str] = set()
def load_disposable_domains():
url = (
"https://raw.githubusercontent.com/disposable-email-domains/"
"disposable-email-domains/master/disposable_email_blocklist.conf"
)
try:
resp = requests.get(url, timeout=10)
if resp.ok:
DISPOSABLE_DOMAINS.update(
line.strip().lower()
for line in resp.text.splitlines()
if line.strip() and not line.startswith("#")
)
except Exception:
pass # fail silently; disposable check will just return unknown
load_disposable_domains()
# ── Helpers ──────────────────────────────────────────────────────────────────
def check_syntax(email: str) -> dict:
"""Validate email syntax and normalise it."""
try:
info = validate_email(email, check_deliverability=False)
return {
"valid": True,
"normalized": info.normalized,
"local_part": info.local_part,
"domain": info.domain,
}
except EmailNotValidError as e:
return {"valid": False, "error": str(e)}
def get_mx_records(domain: str) -> dict:
"""Look up MX records for the domain."""
try:
answers = dns.resolver.resolve(domain, "MX")
records = sorted(
[{"priority": r.preference, "host": str(r.exchange).rstrip(".")} for r in answers],
key=lambda x: x["priority"],
)
return {"found": True, "records": records}
except (dns.resolver.NXDOMAIN, dns.resolver.NoAnswer, dns.exception.DNSException) as e:
return {"found": False, "error": str(e)}
def check_smtp(email: str, mx_host: str) -> dict:
"""Try to verify the mailbox exists via SMTP RCPT TO (no mail sent)."""
try:
with smtplib.SMTP(timeout=10) as smtp:
smtp.connect(mx_host, 25)
smtp.helo("check.example.com")
smtp.mail("check@example.com")
code, msg = smtp.rcpt(email)
return {
"reachable": code == 250,
"smtp_code": code,
"smtp_message": msg.decode(errors="replace"),
}
except smtplib.SMTPConnectError as e:
return {"reachable": None, "error": f"SMTP connect failed: {e}"}
except smtplib.SMTPServerDisconnected as e:
return {"reachable": None, "error": f"Server disconnected: {e}"}
except (socket.timeout, OSError) as e:
return {"reachable": None, "error": f"Network error: {e}"}
except Exception as e:
return {"reachable": None, "error": str(e)}
def check_disposable(domain: str) -> dict:
"""Check if domain is a known disposable / temporary email provider."""
is_disposable = domain.lower() in DISPOSABLE_DOMAINS
return {
"is_disposable": is_disposable,
"database_loaded": len(DISPOSABLE_DOMAINS) > 0,
}
def get_whois_info(domain: str) -> dict:
"""Fetch WHOIS data for the domain (free, no key required)."""
try:
w = whois.whois(domain)
def _first(val):
return val[0] if isinstance(val, list) else val
1 044
🔥 REAL TEMP MAIL BOT
Asli temporary email milta hai.
OTP / verification ke liye use karo.
Steps:
1. Bot start
2. Channels join + Verify
3. Generate Email
4. Check Inbox
No fake • No referral • Free
@GET_FREE_TEMP_MAIL_BOT
@GET_FREE_TEMP_MAIL_BOT
@GET_FREE_TEMP_MAIL_BOT
@GET_FREE_TEMP_MAIL_BOT
1 044
🔥 FREE VIRTUAL NUMBER BOT
Temporary numbers from India, USA, UK, UAE & more.
Kaise use kare:
1. Bot start karo
2. Channels join + Verify
3. Country select karo
4. 5 friends refer karke OTP unlock lo
Bot 👉 @GetFreeVirtualNumber_Bot
1 044
🚨 FREE VPS BOT LIVE
Ab free VPS claim kar sakte ho.
✅ Features:
• Free VPS allocation
• Force join system
• 5 referral = full unlock
• Clean professional interface
Steps:
1. @Indian_Free_VPS_bot pe jao
2. /start dabao
3. Channels join + Verify
4. Referral link share karke unlock karo
Link 👉 @Indian_Free_VPS_bot
1 044
🚨 NEW TOOL DROPPED
Instagram se Phone Number nikaalne wala bot aa gaya.
🔥 Features:
• Instagram → Number lookup
• Force join system
• Referral based unlock
• 5 referrals = Unlimited searches
Kaise start kare:
1. @INSTA_TO_PHONE_OSINT_BOT pe jao
2. /start dabao
3. Saare channels join karo
4. Verify karo
5. Referral link share karke unlock lo
Link 👉 @INSTA_TO_PHONE_OSINT_BOT
1 044
NEW SERVICE ADDED
1. Aadhaar To All Data Info ₹30
2. Aadhaar to Name ₹5
3. Aadhaar to Father Name ₹5
4. Aadhaar to Address ₹15
5. Aadhaar To Mobile ₹15
6. Aadhaar To Ration Card ₹20
7. Aadhaar PAN Link Check ₹5
8. Aadhaar to NPCI Bank Link Check ₹15
9. Aadhaar To Pan Find ₹30
10. PAN To Name & DOB Info ₹15
11. PAN To GST ₹10
12. PAN to Aadhaar ₹70
13. Vehicle To Mobile Number ₹25
14. Vehicle Info Server 1 ₹10
15. Vehicle RC Info 2 ₹15
16. Driving License Info ₹15
17. DL 2 Number ₹30
18. Passport Info ₹20
19. Vehicle to Challan ₹10
20. Vehicle Rc Pdf ₹30
21. DL to PDF ₹30
22. Agriculture to Detail ₹25
23. Agriculture to PDF V2 ₹15
24. Bank IFSC Details ₹5
25. GST Advance 2.0 ₹10
26. Mobile Number Info ₹20
27. Email Info / Leaks ₹50
28. Telegram To Number ₹15
29. Pincode Details ₹5
30. Post Office Info ₹5
31. Aadhaar To PDF ₹100
32. Aadhaar to Ration PDF ₹30
33. PAN To Name & DOB ₹15
34. PAN To GST Lookup ₹10
35. Mobile to PAN ₹30
36. Mobile To Vehicle Number ₹100
37. LL to PDF ₹25
38. Chassis 2 Vehicle Number ₹100
39. Engine 2 Vehicle Number ₹100
40. Vehicle to Challan V2 ₹30
41. Agriculture to PDF V4 ₹20
42. Agriculture to PDF V5 ₹25
43. Agriculture to Status ₹15
44. Voter to Detail ₹15
45. Voter Mobile Link OTP Send ₹20
46. Voter Mobile Link No OTP Instant ₹30
47. Ayushman to PNG ₹50
48. Ration to Aadhaar All State ₹250
49. Ration to PDF ₹50
Note this is real price according to main panel but I will give you very high discountMessage here @ykguycyber
1 044
Ye bahut usefull hai 75% kaam yahi karega keys find krne ke liye
Ration info
Lpg info all
Eshram
Uidai
Sab isi se Banega
