Simplify Web Scraping for Smarter Decision-Making

Don't waste time and resources scraping sites or trying to unfurl urls.

$ curl -X GET ""
    "hybridGraph": {
        "title": "Google",
        "description": "Search the world's information...",
        "image": "",
    "openGraph": {
        // ...
    "htmlInferred": {
        // ...

Why choose

Support More Sites

Support More Sites

We update our scraping algorithms daily so you don’t have to worry about it. Don’t spend countless development hours supporting every last site out there!

Not Just Open Graph

Not Just Open Graph

Many sites still don’t provide the proper Open Graph tags in their markup but that doesn’t matter! Our system will fallback and make very smart guesses based on page content.

Scrape those Products

Scrape those Products

We parse html from URLs you provide for products being offered and provide them back in a common format to make displaying it in your product a breeze. When available, our API provides back prices, descriptions, and images.

Advanced Proxy Pool

Advanced Proxy Pool

We manage pools of millions of proxies across dozens of ISPs and intelligently route your request to avoid being blocked to get your the information you need without the hassle!

How simple is it?

Discover the simplicity of OpengraphIO and experience how effortless it is to harness its power.

Check Out Our Awesome Documentation
Ruby Code
C# Code
PHP Code
NodeJs Code
jQuery Code

require 'opengraph-io'  
opengraph ={app_id: '!!!!YOUR_APP_ID!!!'})
ogData = opengraph.get_site_info('')
siteDescription = ogData["hybridGraph"]["description"]
print siteDescription

using System;
using System.Net;
using System.IO;
using System.Json;

namespace CSharpDemo
    class MainClass
        public static void Main (string[] args)
            var url = "";
            var urlEncoded = Uri.EscapeDataString(url);

            var requestUrl = "" + urlEncoded;

            // Make sure to get your API key! No need for a CC
            requestUrl += "?app_id=XXXXXXXXXXXXXXXXXXXXXXXX";

            var request = WebRequest.Create(requestUrl);
            request.ContentType = "application/json;";

            string text;

            var response = (HttpWebResponse)request.GetResponse();

            using (var sr = new StreamReader(response.GetResponseStream()))
                text = sr.ReadToEnd();

                dynamic x = JsonConvert.DeserializeObject(text);

                Console.WriteLine("Title		" + x.hybridGraph.title);
                Console.WriteLine("Description	" + x.hybridGraph.description);
                Console.WriteLine("Image		" + x.hybridGraph.image);

$siteUrl = '';
$requestUrl = '' . urlencode($siteUrl);

// Make sure you include your free app_id here!  No CC required
$requestUrl = $requestUrl . '?app_id=XXXXXXXXXXXXXXXXXXXXXXXX';

$siteInformationJSON = file_get_contents ($requestUrl);
$siteInformation = json_decode($siteInformationJSON, true);

print 'Title		' . $siteInformation['hybridGraph']['title'] . '\n';
print 'Description	' . $siteInformation['hybridGraph']['description'] . '\n';
print 'Logo URL	' . $siteInformation['hybridGraph']['image'] . '\n';

var opengraph = require('opengraph-io')({appId: 'xxxxxx'}); // <-- Enter your app_id!
var express = require('express');
var app = express();

app.get('/site/info', function (req, res) {
  var siteUrl = req.query['url'];

  opengraph.getSiteInfo(siteUrl, function(err, siteInfo){
    console.log('hey err', err);
    console.log('hey result', siteInfo);

app.listen(3000, function() {
  console.log('Example app listening on port 3000!');
  console.log('Test this proxy with the following url:', 'http://localhost:3000/site/info?');

var url = '';
var urlEncoded = encodeURIComponent(url);
var apiKey = 'xxxxxxxxxx';

// The entire request is just a simple get request with optional query parameters
var requestUrl = '' + urlEncoded + '?app_id=' + apiKey;

  $.getJSON(requestUrl, function(json) {
    console.log('hey result', json);

    // Throw the object in the console to see what it looks like!
    console.log('json', json);

    // Update the HTML elements!
    $('#icon').attr('src', json.hybridGraph.image);

Trusted by Thousands

Over 1B Site Previews!



as Simple as our API

Green Squiggly

Choose a plan that's right for you



1000 API Credits

1 Concurrent Request

No credit card required

Priority Support

Concurrent proxy request

Superior Proxy

Multiple Users



50,000 API Credits

3 Users

$1 / thousand API Credits after 50k

5 Concurrent Requests

Email Support

Most Popular



250,000 API Credits

Unlimited Users

1 Dedicated Worker

$0.80 / thousand API Credits after 250k

25 Concurrent Requests

Email Support



1,000,000 API Credits

Unlimited Users

2 Dedicated Workers

$0.50 / thousand API Credits after 1 million

100 concurrent proxy request

Priority Support


Contact Us

Growing plan features plus...

Unmetered dedicated

Custom domain

Development services

Available SLA

Phone support

Cancel anytime

Frequently Asked Questions

Do you charge for failed requests?

We try not to charge when a request fails outright (e.g. 500 error / DNS timeout / etc). Things get a bit more fuzzy if we are talking about not getting back good data from our request, as determining the criteria for “no results” can be challenging, and the request is utilizing resources on our end.

What's the difference between HybridGraph and OpenGraph in results?

Many websites like Twitter block bots to prevent link unfurling activity, the list below breaks down the difference between openGraph and hybridGraph:

  • hybridGraph: Mix between HTML Inferred and OpenGraph Data + our own implementation to talk to websites.
  • openGraph: Only values provided from the website
  • htmlInferred: Values yielded from the content of the website

Why is your free plan so limited in the number of requests?

Unfortunately, we are constantly trying to battle abuse of our free service, and this is the result. People will jump through a lot of hoops to save $20 a month.

If you end up using the product for anything more than development, we would recommend switching to the paid plan. If you end up being dissatisfied with the service, or just find it not to be a fit, reach out to us and let us know… we will be happy to help you out.

Is there any validation and filtering going on at your end for sanitising the data before it comes back to us?

We do not perform any sanitizing of data that comes back from sites we process.

What are the steps to delete user data and account on, and how can users contact the support team to request the deletion of their data?

As part of our commitment to user privacy, we provide clear instructions on how users can request their data to be deleted. If you wish to delete your account, you can do so by going to your profile page and selecting the ‘delete account’ option. Upon deletion, all of your data will be permanently removed from our systems. Alternatively, if you prefer, you can contact our support team at and request that your data be deleted. We will process your request promptly and with the utmost care to ensure that your data is completely removed from our servers.

Still have Questions? 🙋

Can't find the answer you're looking for? Please chat to our friendly team. We usually respond within 24 hours.

Contact Us