jsonscraper
שווקים
חזרה ליומן

איך לבדוק לידים מטיקטוק באינסטגרם לפני העברתם ל-CRM

אספו אותות ציבוריים שמצאתם בטיקטוק ובדקו פרופילי אינסטגרם מקושרים לפני סיווג ידני של איש הקשר

מדיניות עריכה דיווח על שגיאה

משווק עשוי למצוא בטיקטוק סרטון שהיוצר שלו מדבר על מוצר מבוקש, אך המעבר מאות כזה לאיש קשר שאפשר לאמת מורכב יותר: שם היוצר בטיקטוק ושמו באינסטגרם עשויים להיות שונים, והפרופיל עשוי להיות פרטי או שלא תהיה כל ראיה המאשרת את הקשר שלו לאדם. התוצאה המעשית אינה רשימה אוטומטית של «לידים מוכנים», אלא טבלת בדיקה: הסרטון המקורי, יוצר הטיקטוק, שם המשתמש המשוער באינסטגרם, תגובת ה-API וסטטוס להמשך בירור.

להלן תהליך Python בסיסי למשימה. הוא מחפש סרטונים ציבוריים לפי ביטוי מפתח, מחלץ את פרטי היוצר הזמינים ובודק פרופילי אינסטגרם רק אם כבר יש לכם שם משתמש מבוסס לבדיקה. ה-API יכול לקבל נתוני פרופיל לפי שם משתמש; הוא אינו קובע אוטומטית ששני חשבונות שייכים לאותו אדם.

איזו תוצאה כדאי להפוך לאוטומטית

דמיינו צוות שמוכר ציוד להכנת קפה בבית ורוצה למצוא יוצרים של סרטונים ציבוריים על הכנת משקאות. חיפוש ידני מועיל להיכרות ראשונית עם התוכן, אך כשחוזרים עליו קשה לשמור איזה סרטון הוביל לאיש הקשר, מהיכן הגיע שם הפרופיל ומה בדיוק נבדק.

מאמר: איך לבדוק לידים מטיקטוק באינסטגרם לפני העברתם ל-CRM
תקציר: תהליך Python מדורג מקשר סרטוני טיקטוק ציבוריים למחברים המצוינים בפרופילים, ואז בודק חשבונות אינסטגרם מתאימים באמצעות jsonscraper. התוצאה היא טבלה לבדיקה ידנית, שבה הנתונים מהפלטפורמות אינם מתערבבים ושדות חסרים נשארים ריקים.
תפקיד התמונה: תמונת שער — הרעיון המרכזי
מקטע: איזו תוצאה כדאי להפוך לאוטומטית
נושא חזותי: צילום מערכתי של שולחן מחקר של משווק
שרשרת הניתנת לבדיקה מקשרת את הסרטון שנמצא לשלב נפרד של בדיקה ידנית של פרופיל אינסטגרם.© jsonscraper · נוצר באמצעות בינה מלאכותית

תהליך העבודה מפריד בין שלוש פעולות: חיפוש סרטונים בטיקטוק, שמירת הנתונים שנצפו ובדיקת פרופיל אינסטגרם משוער. כך האנליסט יכול לפתוח קובץ CSV אחד ולראות את מקורו של כל מועמד. יש למלא שדות של אינסטגרם רק לאחר ששם המשתמש נמצא בתיאור ציבורי, בקישור של היוצר, או אומת בידי אדם באמצעות חומרים זמינים אחרים.

השיטה מועילה לסוכנות, לצוות מחקר או למשווק פנימי שזקוקים לרשימה קטנה וניתנת לשחזור לצורך סיווג ידני. היא שומרת את ההקשר של הממצא ואינה הופכת שמות דומים לטענה בדבר זהות.

אילו שדות אפשר לקבל

נתיב טיקטוק המתועד /searchVideo מקבל את הפרמטר החובה keyword; זמינים גם count, date_posted, sort_by, region ו-cursor. בתגובות שנצפו מופיעים מזהה הסרטון, תיאור, תאריך פרסום, קישור, פרטי היוצר ומוני מעורבות ציבוריים. מערך השדות בפועל עשוי להשתנות, ולכן הקוד להלן משתמש בקריאה בטוחה שמחזירה ערכים ריקים כשצריך.

לצורך אינסטגרם, התהליך הזה משתמש בנתיב GET המתועד /v1/user/by/username עם הפרמטר username. התגובה עשויה לכלול שם משתמש, שם תצוגה, מצב פרטיות ואימות, מספר פוסטים, עוקבים ונעקבים, וכן ביוגרפיה. אלה נתונים לעיון ולהחלטה בהמשך בידי איש מקצוע, ולא דירוג של היוצר.

התיעוד הרשמי של TikTok API מתאר את פרמטרי החיפוש, ואילו התיעוד של IG API מפרט את השיטות והפרמטרים של אינסטגרם. הגדרות ה-API המובנות של jsonscraper מתעדות אף הן את הנתיבים, שמות הפרמטרים וצורות התגובה שנצפו; תאריך הבדיקות המצוינות הוא 25 באוקטובר 2026.

הגדירו מפתחות ורשימת מועמדים

שמרו את מפתחות ה-API במשתני הסביבה JSONSCRAPER_TIKTOK_LICENSE_KEY ו-JSONSCRAPER_INSTAGRAM_LICENSE_KEY. אל תכניסו אותם לקוד המקור, לקובצי CSV או ליומני משימות. להתקנת ספריית הבקשות, השתמשו ב-python -m pip install requests. הדוגמה הבאה מיועדת ל-Python 3.8 ואילך.

import csv
import os
import sys
from urllib.parse import urlencode

import requests

TIKTOK_KEY = os.environ.get("JSONSCRAPER_TIKTOK_LICENSE_KEY")
INSTAGRAM_KEY = os.environ.get("JSONSCRAPER_INSTAGRAM_LICENSE_KEY")

if not TIKTOK_KEY or not INSTAGRAM_KEY:
    sys.exit("Set JSONSCRAPER_TIKTOK_LICENSE_KEY and JSONSCRAPER_INSTAGRAM_LICENSE_KEY")


def get_json(base_url, path, params):
    response = requests.get(
        f"{base_url}{path}",
        params=params,
        timeout=30,
    )
    response.raise_for_status()
    return response.json()


def extract_videos(payload):
    """Handle both observed TikTok search result locations."""
    if payload.get("status") != "ok":
        raise RuntimeError(f"TikTok API status: {payload.get('status')}")

    tiktok = payload.get("tiktok") or {}
    videos = list(tiktok.get("aweme_list") or [])
    for item in tiktok.get("search_item_list") or []:
        video = item.get("aweme_info")
        if video:
            videos.append(video)

    unique = {}
    for video in videos:
        video_id = video.get("aweme_id")
        if video_id:
            unique[video_id] = video
    return list(unique.values())


keyword = "домашний кофе"
tiktok_payload = get_json(
    "https://tiktok.evelode.com",
    "/searchVideo",
    {
        "license_key": TIKTOK_KEY,
        "keyword": keyword,
        "count": 20,
        "date_posted": "this-month",
        "sort_by": "relevance",
    },
)

rows = []
for video in extract_videos(tiktok_payload):
    author = video.get("author") or {}
    stats = video.get("statistics") or {}
    rows.append({
        "tiktok_video_id": video.get("aweme_id", ""),
        "tiktok_url": video.get("share_url", ""),
        "video_description": video.get("desc", ""),
        "created_at": video.get("create_time", ""),
        "tiktok_username": author.get("unique_id", ""),
        "tiktok_author_name": author.get("nickname", ""),
        "tiktok_followers": author.get("follower_count", ""),
        "views": stats.get("play_count", ""),
        "likes": stats.get("digg_count", ""),
        "instagram_username": "",
        "instagram_status": "not checked",
        "instagram_followers": "",
        "instagram_is_private": "",
        "manual_match_review": "required",
    })

# Заполняйте этот словарь только username, найденными отдельно
# и внесёнными после ручной проверки источника.
verified_instagram_usernames = {
    # "tiktok_video_id": "instagram_username"
}

for row in rows:
    username = verified_instagram_usernames.get(row["tiktok_video_id"])
    if not username:
        continue

    ig_payload = get_json(
        "https://ig.jsonscraper.com",
        "/v1/user/by/username",
        {
            "license_key": INSTAGRAM_KEY,
            "username": username,
        },
    )
    if ig_payload.get("status") != "ok":
        row["instagram_status"] = "api status: " + str(ig_payload.get("status"))
        continue

    profile = ig_payload.get("ig") or {}
    row["instagram_username"] = profile.get("username", username)
    row["instagram_status"] = "profile returned"
    row["instagram_followers"] = profile.get("follower_count", "")
    row["instagram_is_private"] = profile.get("is_private", "")
    row["manual_match_review"] = "check relationship manually"

if rows:
    with open("social_lead_checks.csv", "w", newline="", encoding="utf-8") as f:
        writer = csv.DictWriter(f, fieldnames=rows[0].keys())
        writer.writeheader()
        writer.writerows(rows)
else:
    print("No video rows returned for this query.")

למה המטפל תומך בשתי צורות תגובה

בחיפוש בטיקטוק סרטונים עשויים להופיע בשני מקומות: tiktok.aweme_list ו-tiktok.search_item_list[].aweme_info. בתגובת חיפוש שנצפתה, הרשימה הראשונה עשויה להיות ריקה, בעוד שהפריטים נמצאים בשנייה. לכן הדוגמה מאחדת את שני המקורות ומסירה כפילויות לפי aweme_id. תחילה היא בודקת את status החיצוני, ולאחר מכן קוראת את האובייקט tiktok.

מאמר: איך לבדוק לידים מטיקטוק באינסטגרם לפני העברתם ל-CRM
תקציר: תהליך Python מדורג מקשר סרטוני טיקטוק ציבוריים למחברים המצוינים בפרופילים, ואז בודק חשבונות אינסטגרם מתאימים באמצעות jsonscraper. התוצאה היא טבלה לבדיקה ידנית, שבה הנתונים מהפלטפורמות אינם מתערבבים ושדות חסרים נשארים ריקים.
תפקיד התמונה: איור תומך 2 — היבט מסוים אחר
מקטע: למה המטפל תומך בשתי צורות תגובה
נושא חזותי: Clea
התרשים מציג את שני המקומות שבהם מופיעות תוצאות החיפוש בטיקטוק ואת שלב הבדיקה הידנית הנפרד לפני הבקשה לאינסטגרם.© jsonscraper · איור שנוצר בבינה מלאכותית

הקוד שומר רק שדות שנמצאים בפועל בתגובה. ערך ריק פירושו שהשדה לא הופיע באובייקט שהתקבל; אין לפרש אותו כמדד שערכו אפס. כדאי לשמור קישורים ותיאורים של סרטונים לצד המדדים: אחרת הטבלה מאבדת את ההקשר המקורי כשעוברים עליה בהמשך.

הוסיפו עימוד רק אם יש צורך

הדוגמה מבקשת עמוד אחד ומעבדת רק את הפריטים שהוחזרו. אם יש צורך להמשיך בחיפוש, התיעוד מציין את cursor לחיפוש סרטונים; יש לקחת את הערך מהתגובה הקודמת. שמרו את ה-cursor כערך אטום והעבירו אותו בלי לחשב אותו בעצמכם. עצרו את הלולאה כשהתגובה מציינת שאין המשך, או כשהגעתם למגבלה שהצוות קבע. עימוד מרחיב את מערך התוצאות שהוחזרו, אך אינו מצדיק הצגתו כסיקור ממצה של כל הפרסומים בנושא.

לפני הוספת ייצוא אוטומטי, בדקו תגובה ממשית באמצעות המפתח שלכם ובחרו מספר מתון של עמודים. שמרו את JSON המקורי לצד שורה מנורמלת או בנפרד לפי תאריך ההרצה: כך תוכלו לברר אם שדה התגובה השתנה ולעבד מחדש את הנתונים אם הסכמה תשתנה.

איך להשתמש ב-CSV לצורך סיווג

בטבלה אפשר לסנן שורות לפי קיומם של קישור לסרטון, תיאור, יוצר ופרופיל אינסטגרם שמולאו בו פרטים. תוויות פשוטות מועילות לתור הבדיקה הראשון: «נמצא סרטון», «נמצא שם משתמש באינסטגרם», «הפרופיל הוחזר», «הקשר בין החשבונות אומת בידי אדם» ו«הוצא מהרשימה». הסטטוסים מתארים את תהליך הבדיקה, ולא את איכותו או כוונותיו של היוצר.

אם המשימה דורשת דוח שניתן להפיק שוב, הריצו את הסקריפט לפי לוח זמנים והוסיפו עמודה נפרדת לתאריך קבלת הנתונים. השוואת תמונות המצב תראה מה השתנה בין הרצות בשדות הזמינים, למשל במספר העוקבים בפרופיל. יש לשמור מדדים של טיקטוק ואינסטגרם בנפרד, עם ציון הפלטפורמה ומועד התצפית: מדובר בהקשרים שונים ובתגובות API שונות.

לזרם נתונים גדול יותר, החליפו את CSV במסד נתונים שבו המפתח הראשי מורכב מהפלטפורמה ומזהה הסרטון. שמרו את טקסט השאילתה המקורי, את מועד האיסוף ואת התגובה הגולמית. עדיף לשלוח התראה ל-Slack או להעביר שורה ל-CRM רק לאחר אימות ידני של הקשר בין הפרופילים, ולא מיד לאחר התאמת שמות.

מגבלות הפרשנות ותפעול בטוח

חיפוש לפי ביטוי מפתח מחזיר את תוצאות ה-API שנמצאו, ולא רשימה מלאה של פרסומים. מספר הצפיות, הלייקים והעוקבים הוא תמונת מצב של התגובה בעת הבקשה. אפשר להשתמש בו למיון רשימת עבודה ולהמשך בדיקה, אך הוא אינו מאשר כשלעצמו כוונה מסחרית, את מאפייני הקהל או הסכמה ליצירת קשר.

אשרו את הקשר בין הפרופילים על סמך סימנים ציבוריים מפורשים ותעדו מי ביצע את הבדיקה ומתי. אם שם המשתמש באינסטגרם התקבל מטבלה של צד שלישי ללא מקור שניתן לאמת, השאירו את הסטטוס «נדרשת בדיקה». יש להציג פרופיל פרטי או נתונים חסרים כתוצאת בדיקה נפרדת, בלי לנסות להשלים את הפער באמצעות הנחה.

השתמשו במפתחות בכספת סודות של סביבת העבודה, הגבילו את הגישה לייצואים וקבעו תקופת שמירה שמתאימה למטרת המחקר. העבירו ל-CRM רק שדות הנחוצים להמשך עבודה ידנית, ופעלו בהתאם לכללי הפלטפורמות ולדרישות החלות על עיבוד נתונים.

מה תקבלו בסוף

לאחר ההרצה ייווצר קובץ CSV עם רשימת הסרטונים שנמצאו, היוצרים והמדדים הזמינים, וכן שדות נפרדים לבדיקת אינסטגרם. אפשר להריץ את הסקריפט ידנית, לפי לוח זמנים ב-CI או באמצעות צומת בקשת HTTP בפלטפורמת אוטומציה. העיקרון המעשי הוא להפוך את איסוף הנתונים ואת המבנה שלהם לאוטומטיים, ולהשאיר את קביעת הקשר בין החשבונות לשלב אנושי שניתן לבדיקה.

כדי לבדוק נתיבים ופרמטרים זמינים, התחילו ב-TikTok Scraper API וב-IG Scraper API. בדפי המוצרים יש דוגמאות לבקשות וקישורים לתיעוד; התחילו בבקשה קטנה לפני שילוב האיסוף בתהליך קבוע.

אֲנָשִׁים

עדיין לא רשומים אנשים עבור מאמר זה.

המשיכו לקרואכיצד להפוך פרופילי IG לרשימת שינויים יומית
קרא את המאמר הבא

הפכו את מה שקראתם לאינטגרציה עובדת

גלו את ממשקי ה-API לנתונים חברתיים של jsonscraper, בדקו בקשות ובנו את תהליך העבודה הבא.

גלה API