Dating app scraper - Tindr

 Title: Scraping Tinder User Data Using Wireshark and Emulator Techniques

Scraping Tinder is non-trivial due to strong client-side protection, use of certificate pinning, encrypted APIs, and dynamic token-based authentication. However, with a rooted Android emulator, network proxying, and some reverse engineering of the app’s traffic, it’s possible to capture API calls and extract structured user data.


Step 1: Setup Environment for Traffic Interception

  • Emulator: Use rooted Android emulator (e.g., Genymotion rooted image or AVD with Magisk).

  • Proxy tool: Set up Wireshark and mitmproxy on your host machine. Configure emulator Wi-Fi settings to route through proxy.

  • SSL Bypass:

    • Install mitmproxy's SSL certificate in the emulator (via /system/etc/security/cacerts/).

    • Use tools like Frida or Xposed + JustTrustMe to disable certificate pinning in the Tinder app.

  • App Source: Use jadx to decompile the Tinder APK and locate auth token code paths (e.g., X-Auth-Token, device UUID, Facebook/Google Auth flows).


Step 2: Identify Key Tinder API Calls

Tinder’s APIs are mostly RESTful and JSON-based. With Wireshark or mitmproxy sniffing in place, monitor requests to endpoints like:

https://api.gotinder.com/v2/matches
https://api.gotinder.com/user/recs
https://api.gotinder.com/v2/fast-match/teasers

Inspect headers like X-Auth-Token, User-Agent, and platform. Most JSON responses include:

  • name

  • birth_date

  • gender

  • schools, jobs, photos

  • user_id

  • distance_mi, ping_time


Step 3: Automate the Scraping via Authenticated Requests

After extracting a valid token and device headers, use Python to send requests and parse the output.

import requests
import csv

headers = {
    "X-Auth-Token": "YOUR_AUTH_TOKEN",
    "User-Agent": "Tinder Android Version 13.8.0",
}
url = "https://api.gotinder.com/user/recs"

resp = requests.get(url, headers=headers)
users = resp.json().get("results", [])

with open("tinder_data.csv", "w", newline="") as f:
    writer = csv.writer(f)
    writer.writerow(["a_btw", "src_dom", "fn", "g", "d", "origin", "dor", "id", "m_sent", "m_recvd"])
    for u in users:
        writer.writerow([
            "Feb-24", "tinder+misc",
            u.get("name", ""),
            "f" if u.get("gender") == 1 else "m",
            "", "indian",
            u.get("ping_time", "")[:10],
            u.get("_id", ""),
            u.get("messages_sent", 0),  # hypothetical field
            u.get("messages_received", 0)
        ])

Note: messages_sent and messages_received are inferred; actual Tinder APIs may not expose them directly—may require match detail scraping.


Step 4: Handling Pagination and Rate Limiting

Tinder enforces rate limits (e.g., 100 swipes/day for free accounts). Scraping too aggressively will result in HTTP 429s or bans. Use time.sleep() delays and rotate accounts/devices/tokens.

import time

def safe_get_recs():
    for _ in range(10):
        res = requests.get(url, headers=headers)
        if res.status_code == 429:
            print("Rate limited. Sleeping 60s.")
            time.sleep(60)
            continue
        process(res.json())
        time.sleep(3)

Consider replaying captured requests using curl with cookies set manually from mitmproxy logs to validate behavior before automation.


Step 5: Output Example

Here’s the desired CSV format, generated from extracted data:

a_btw,src_dom,fn,g,dor,origin,dor,id,m_sent,m_recvd
Feb-24,tinder+misc,aakanksha,f,,indian,4/7/2020,93445,21,12
Feb-24,tinder+misc,aarti devi,f,,indian,7/9/2018,45238,12,32
Feb-24,tinder+misc,charu,f,,indian,10/28/2018,84501,25,2
Feb-24,tinder+misc,kranti sharma,f,,indian,4/19/2020,24658,19,34
Feb-24,tinder+misc,neha,f,,indian,9/1/2020,68074,17,10
Feb-24,tinder+misc,nilam devi,f,,indian,3/2/2018,94001,5,28
Feb-24,tinder+misc,pooja jayshwal,f,,indian,7/31/2020,17216,17,28
Feb-24,tinder+misc,preeti gupta,f,,indian,4/24/2018,46411,6,26
Feb-24,tinder+misc,preeti sinha,f,,indian,6/22/2021,10451,9,23
Feb-24,tinder+misc,priya sexena,f,,indian,5/12/2021,58238,8,19
Feb-24,tinder+misc,priyanga ananthasekaran,f,,indian,7/13/2022,38039,3,2
Feb-24,tinder+misc,sashi mittal,f,,indian,8/30/2019,31986,3,27
Feb-24,tinder+misc,seema,f,,indian,12/7/2020,46781,16,25
Feb-24,tinder+misc,shajiya,f,,indian,6/18/2018,77648,11,24
Feb-24,tinder+misc,shanthi devi,f,,indian,5/17/2021,78461,9,14


Comments