How to Capture Social Proof Screenshots for Marketing and Sales

2026-04-20 | Tags: [screenshot-api, use-cases, marketing, social-proof, tutorials]

Social proof works best when it's visual. A screenshot of a real tweet, a G2 review, or a LinkedIn post carries more weight than a copied quote. The image shows the platform, the username, the timestamp — it can't be fabricated in the same way text can.

The problem: manually screenshotting every testimonial, review, and mention is slow. And as your product grows, the volume of social proof grows faster than you can keep up with manually.

A screenshot API solves this by capturing visual evidence on-demand, automatically, as part of your marketing workflow.

What to Screenshot

Review Site Profiles

Capture your G2, Capterra, Trustpilot, or ProductHunt profile page:

import requests

def capture_review_page(review_url: str, output_path: str, api_key: str):
    resp = requests.get(
        "https://hermesforge.dev/api/screenshot",
        params={
            "url": review_url,
            "width": 1440,
            "format": "png",
            "full_page": "false",  # viewport-only captures the star rating + review count
            "wait_for": "networkidle",
            "key": api_key
        },
        timeout=30
    )
    resp.raise_for_status()
    with open(output_path, "wb") as f:
        f.write(resp.content)

# Example
capture_review_page(
    "https://www.g2.com/products/your-product/reviews",
    "assets/g2-reviews.png",
    "YOUR_API_KEY"
)

Run this weekly. Your landing page shows a fresh screenshot of your current G2 rating — automatically updating as new reviews come in.

Individual Review Pages

For a specific review you want to highlight, screenshot the individual review URL:

reviews = [
    {
        "url": "https://www.g2.com/reviews/12345678",
        "label": "enterprise-review"
    },
    {
        "url": "https://www.capterra.com/reviews/87654321",
        "label": "smb-review"
    }
]

for review in reviews:
    capture_review_page(
        review["url"],
        f"assets/social-proof/{review['label']}.png",
        api_key
    )

Twitter/X Mentions

Public tweet URLs return screenshottable pages:

tweet_urls = [
    "https://twitter.com/username/status/12345678901234567",
    "https://twitter.com/username/status/98765432109876543"
]

for i, url in enumerate(tweet_urls):
    capture_review_page(url, f"assets/tweets/tweet-{i+1}.png", api_key)

Twitter pages are JavaScript-heavy — wait_for=networkidle is important for tweet screenshots to render fully.

LinkedIn Posts

Public LinkedIn posts with testimonials can be captured the same way:

capture_review_page(
    "https://www.linkedin.com/posts/username_activity-12345678901234567-abcd",
    "assets/linkedin-testimonial.png",
    api_key
)

Batch Capture Pipeline

For capturing a library of social proof assets in one run:

import json
import os
import time
import requests

def batch_capture_social_proof(sources_file: str, output_dir: str, api_key: str):
    with open(sources_file) as f:
        sources = json.load(f)

    os.makedirs(output_dir, exist_ok=True)
    results = []

    for source in sources:
        slug = source["slug"]
        url = source["url"]
        output_path = os.path.join(output_dir, f"{slug}.png")

        if os.path.exists(output_path):
            print(f"Cached: {slug}")
            results.append({"slug": slug, "status": "cached", "path": output_path})
            continue

        try:
            resp = requests.get(
                "https://hermesforge.dev/api/screenshot",
                params={
                    "url": url,
                    "width": source.get("width", 1280),
                    "format": "png",
                    "wait_for": "networkidle",
                    "key": api_key
                },
                timeout=30
            )
            resp.raise_for_status()

            with open(output_path, "wb") as f:
                f.write(resp.content)

            print(f"Captured: {slug}")
            results.append({"slug": slug, "status": "ok", "path": output_path})

        except Exception as e:
            print(f"Failed: {slug} — {e}")
            results.append({"slug": slug, "status": "failed", "error": str(e)})

        time.sleep(1)  # Polite rate — 1 req/sec

    return results

sources.json format:

[
    {"slug": "g2-profile", "url": "https://www.g2.com/products/yourproduct/reviews", "width": 1440},
    {"slug": "tweet-power-user", "url": "https://twitter.com/user/status/12345678901234567", "width": 600},
    {"slug": "linkedin-cto", "url": "https://www.linkedin.com/posts/...", "width": 800},
    {"slug": "capterra-profile", "url": "https://www.capterra.com/p/123456/yourproduct/", "width": 1440}
]

Using Screenshots in Marketing

Landing Page Social Proof Section

Reference the captured screenshots as static images in your landing page:

<section class="social-proof">
  <h2>What customers are saying</h2>
  <div class="proof-grid">
    <img src="/assets/social-proof/tweet-power-user.png" alt="Customer tweet" loading="lazy">
    <img src="/assets/social-proof/g2-profile.png" alt="G2 reviews" loading="lazy">
    <img src="/assets/social-proof/linkedin-cto.png" alt="LinkedIn review" loading="lazy">
  </div>
</section>

Sales Deck Automation

For sales teams that build custom decks per prospect, capture fresh social proof screenshots before each deck generation:

def prepare_sales_deck_assets(industry: str, api_key: str) -> dict:
    """Capture fresh social proof screenshots for a specific industry vertical."""
    industry_sources = {
        "saas": [
            {"slug": "g2-saas-review", "url": "https://www.g2.com/reviews/saas-review-id"},
            {"slug": "linkedin-saas-cto", "url": "https://www.linkedin.com/posts/saas-cto-post"}
        ],
        "ecommerce": [
            {"slug": "capterra-ecom", "url": "https://www.capterra.com/reviews/ecom-review-id"}
        ]
    }

    sources = industry_sources.get(industry, [])
    assets = {}

    for source in sources:
        resp = requests.get(
            "https://hermesforge.dev/api/screenshot",
            params={"url": source["url"], "width": 1280, "format": "png", "key": api_key},
            timeout=30
        )
        if resp.status_code == 200:
            assets[source["slug"]] = resp.content

    return assets

Email Campaigns

Embed social proof screenshots as linked images in email:

<img src="https://yoursite.com/assets/social-proof/g2-profile.png"
     alt="4.8 stars on G2"
     width="600"
     style="display:block; max-width:100%;">

Host the screenshots as static files and reference them by URL. Email clients render images from URLs natively — no inline base64 needed.

Refresh Strategy

Asset type Refresh frequency Reason
G2 / Capterra profile Weekly Star rating and review count change as new reviews come in
Individual review pages One-time Review content doesn't change
Tweet screenshots One-time Tweet content doesn't change
LinkedIn posts One-time Post content doesn't change

Run the batch pipeline weekly for profile pages. Cache individual review/post screenshots indefinitely — they're static after first capture.

Handling Paywalls and Login Walls

Review platforms often show partial content to unauthenticated visitors. If a review page requires login:

The screenshot API captures what a logged-out browser would see. Design your social proof library around publicly accessible pages.


Hermesforge Screenshot API handles JavaScript-heavy review sites and social platforms. Get your API key — 50 screenshots/day free, no signup.