Need help with facebook-ruby-business-sdk?
Click the “chat” button below for chat support from the developer who created it, or find similar developers for support.

About the developer

160 Stars 126 Forks Other 167 Commits 39 Opened issues


An SDK built to facilitate application development for Facebook Ads API using Ruby.

Services available


Need anything else?

Contributors list

Facebook Business SDK for Ruby


The Facebook Business SDK is a one-stop shop to help our partners better serve their businesses. Partners are using multiple Facebook API's to server the needs of their clients. Adopting all these API's and keeping them up to date across the various platforms can be time consuming and ultimately prohibitive. For this reason Facebook has developed the Business SDK bundling many of its APIs into one SDK to ease implementation and upkeep. The Business SDK is an upgraded version of the Marketing API SDK that includes the Marketing API as well as many Facebook APIs from different platforms such as Pages, Business Manager, Instagram, etc.

Quick Start

Business SDK Getting Started Guide


Ruby Version

We developed this SDK using Ruby 2.0, and supports Ruby 2.0+, however, the SDK is not thread-safe at the moment.

Register An App

To get started with the SDK, you must have an app registered on

To manage the Marketing API, please visit your Access Token Guide to learn more.

For now, we can use the Graph Explorer to get an access token.


The SDK is available as a RubyGem. To use the gem, you can add the following to Gemfile

gem 'facebookbusiness'

or install it using command line

gem install facebookbusiness

and then in your code

require 'facebookbusiness'


Access Token

There are several ways to configure access token and app secret. If you only use one access token and app secret (example: an internal app managing only your own assets). You can set a global access token and app secret will be used across all requests

FacebookAds.configure do |config|

Another way is to configure using environment variables, which will be picked up by the SDK as the default


Or you can create a session object for particular object

# Create a Session object to be reused
session = , app_secret: )
ad_account = FacebookAds::AdAccount.get('act_', 'name', session)

Or a using shortcut during object instantiation

ad_account = FacebookAds::AdAccount.get('act_', 'name', { access_token: , app_secret: })

Basic Operations

Reading a node

The SDK contains ad object files auto generated from our API metadata, each node type has its own corresponding Ruby class under the

module. For example, to fetch an AdAccount
ad_account = FacebookAds::AdAccount.get('act_', 'name')
puts "Ad Account Name: #{}"


method doesn't trigger the
request immediately. The API request for
is fired on-demand. In the example above, API request won't fire until
is executed.

Updating a node

To update a node, you can use the

method of ad object classes.
ad_account = FacebookAds::AdAccount.get('act_', 'name') = "New Ad Account"

Fetch it again

ad_account.reload! => "New Ad Account"

Deleting a node

To delete a node, you can use the

campaign = FacebookAds::Campaign.get('')


You can refer to our Marketing API reference or look inside

directory of the code base to see the complete list of available ad objects.

Interacting with Edges

To interact with an edge, you first need to instantiate the parent node. Since, as mentioned above,

request of a node is triggered on-demand, so you don't need to worry about consuming unnecessary API quota.

Fetching Edges (GET)

Iterating edges is easy, instantiate the parent nodes and then simply iterate with

. The edge is an
so a bunch of handy methods such as
etc. come for free!
ad_account = FacebookAds::AdAccount.get('act_', 'name')

Printing all campaign names

ad_account.campaigns(fields: 'name').each do |campaign| puts end

Getting all campaign names

ad_account.campaigns(fields: 'name').map(&:name)

Creating new nodes (POST)


to a edge, you can use the
method on the edge and supply parameter if needed
campaign = ad_account.campaigns.create({
  name: "My First campaign",
  objective: "CONVERSIONS",

Removing from edge (DELETE)


an edge, you can use the
method on the edge and supply parameter if needed
# Deleting an AdImage by its hash
ad_account.adimages.destroy({hash: 'abcd1234'})


The SDK supports image/video uploads. Just supply a parameter of


Image upload example:

# AdImage supports multiple images upload
  'logo1.png' =>'./assets/logo1.jpg'),
  'logo2.png' =>'./assets/logo2.jpg'),
=> [#<:adimage>"..."}>, #<:adimage>"..."}>]

Video upload example:

  name: 'My first video',
  source:"../video_ad_example.mp4", __FILE__))

Batch API

Batch API allows you to make API calls in a batch. You can collect a bunch of API requests and fire them all at once to reduce wait time. To create a batch, just wrap operations with a block to

ad_account = FacebookAds::AdAccount.get('act_')

batch = FacebookAds::Batch.with_batch do do |n| ad_account.campaigns.create({ name: 'My Test Campaign #' + n, objective: 'CONVERSIONS', status: 'PAUSED', }) end end


Dependencies within a batch (Experimental)

Dependencies between requests is supported, the SDK simplifies the use of JSONPath references between batched operations.

ad_account = FacebookAds::AdAccount.get('act_')

batch = FacebookAds::Batch.with_batch do

This won't be sent out immediately!

campaign = ad_account.campaigns.create({ name: 'My Test Campaign', objective: 'CONVERSIONS', status: 'PAUSED', })

Even the request above is not being sent yet, reference to still works

ad_accounts.adsets.create({ name: 'My AdSet', campaign_id:, # here will return {result=create-campaign:$.id} ... ... ... }) end


FacebookAds.configure do |config|
  # Logger for debugger
  config.logger = { |d| d.level = Logger::DEBUG }

Log Http request & response to logger

config.log_api_bodies = true end

SDK Codegen

Our SDK is autogenerated from SDK Codegen. If you want to learn more about how our SDK code is generated, please check this repository.

Reporting Bugs/Feedback

Please raise any issue on GitHub.


Facebook Business SDK for Ruby is licensed under the LICENSE file in the root directory of this source tree.

We use cookies. If you continue to browse the site, you agree to the use of cookies. For more information on our use of cookies please see our Privacy Policy.