| Title: | Get Data from 'Apple Ads Campaign Management API' | 
| Version: | 0.1.3 | 
| Description: | Provides functions to load and manage data from Apple Ads accounts using the 'Apple Ads Campaign Management API' https://developer.apple.com/documentation/apple_ads. | 
| License: | MIT + file LICENSE | 
| Encoding: | UTF-8 | 
| RoxygenNote: | 7.3.2 | 
| Imports: | cli, dplyr, httr2, openssl, pbapply, purrr, rappdirs, retry, snakecase, stringr, tidyr, yaml | 
| Depends: | R (≥ 4.1.0) | 
| URL: | https://github.com/selesnow/rappleads | 
| BugReports: | https://github.com/selesnow/rappleads/issues | 
| NeedsCompilation: | no | 
| Packaged: | 2025-08-22 07:23:52 UTC; User | 
| Author: | Alexey Seleznev  | 
| Maintainer: | Alexey Seleznev <selesnow@gmail.com> | 
| Repository: | CRAN | 
| Date/Publication: | 2025-08-27 16:30:12 UTC | 
rappleads: Get Data From 'Apple Ads Campaign Management API'
Description
Load data from Apple Ads Accounts using 'Apple Ads Campaign Management API' https://developer.apple.com/documentation/apple_ads
Author(s)
Maintainer: Alexey Seleznev selesnow@gmail.com (ORCID)
Other contributors:
Netpeak [copyright holder]
See Also
Useful links:
Apple Ads Authorization
Description
Apple Ads Authorization
Usage
apl_auth(
  client_id = Sys.getenv("APL_CLIENT_ID"),
  team_id = Sys.getenv("APL_TEAM_ID"),
  key_id = Sys.getenv("APL_KEY_ID"),
  private_key_path = Sys.getenv("APL_PRIVATE_KEY_PATH"),
  account_name = Sys.getenv("APL_ACCOUNT_NAME"),
  cache_path = rappdirs::site_data_dir("rappleads")
)
Arguments
client_id | 
 You receive your clientId when you upload a public key.  | 
team_id | 
 The client secret is a JWT that you create and sign with your private key.  | 
key_id | 
 The value is your keyId that returns when you upload a public key.  | 
private_key_path | 
 Path to the   | 
account_name | 
 Your apple ads account name  | 
cache_path | 
 Path to the directory where cached authentication data will be stored.  | 
Details
This implementation process guides you through the following steps:
Invite users with API permissions.
Generate a private-public key pair.
Extract a public key from your persisted private key.
Upload a public key.
Set system environments variables.
Request an access token.
Generate a Private Key
API users need to create a private key. If you’re using MacOS or a UNIX-like operating system, OpenSSL works natively. If you’re on a Windows platform, you need to download OpenSSL.
openssl ecparam -genkey -name prime256v1 -noout -out private-key.pem
Extract a Public Key
openssl ec -in private-key.pem -pubout -out public-key.pem
Open the public-key.pem file in a text editor and copy the public key, including the begin and end lines.
Upload a Public Key
Follow these steps to upload your public key:
From the Ads UI, choose Account Settings > API. Paste the key created in the above section into the Public Key field.
Click Save. A group of credentials displays as a code block above the public key field. Use your clientId, teamId, and keyId to create a client secret.
Set system environments variables
Run usethis::edit_r_environ() and set variables:
APL_CLIENT_ID
APL_TEAM_ID
APL_KEY_ID
APL_PRIVATE_KEY_PATH
APL_ACCOUNT_NAME
Request an access token.
Once the environment variables listed above are set, no further action is required from you — any function from the package will automatically request and refresh the access token when executed.
For more information see API Oauth documentation.
Value
character with access_token
Get access_token
Description
Get access_token
Usage
apl_get_access_token(
  client_id,
  jwt_data,
  account_name,
  cache_path = rappdirs::site_data_dir("rappleads")
)
Arguments
client_id | 
 You receive your clientId when you upload a public key.  | 
jwt_data | 
 JWT object   | 
account_name | 
 Your apple ads account name  | 
cache_path | 
 Path to the directory where cached authentication data will be stored.  | 
Value
access_token object
Get Ad Group-Level Reports
Description
Get Ad Group-Level Reports
Usage
apl_get_ad_group_report(
  org_id = apl_get_me_details()$parentOrgId,
  campaign_id = apl_get_campaigns()$id,
  start_date = Sys.Date() - 8,
  end_date = Sys.Date() - 1,
  group_by = NULL,
  granularity = c("DAILY", "HOURLY", "WEEKLY", "MONTHLY")
)
Arguments
org_id | 
 The value is your orgId.  | 
campaign_id | 
 The unique identifier for the campaign.  | 
start_date | 
 Start reporting date  | 
end_date | 
 End reporting date  | 
group_by | 
 Use the groupBy field to group responses by selected dimensions. If groupBy specifies age, gender, and geodimensions  | 
granularity | 
 The report data organized by hour, day, week, and month.  | 
Value
tibble with ad group report
Examples
## Not run: 
adgr_rep <- apl_get_ad_group_report()
## End(Not run)
Get Ad Groups
Description
Get Ad Groups
Usage
apl_get_ad_groups(org_id = apl_get_me_details()$parentOrgId)
Arguments
org_id | 
 The value is your orgId.  | 
Value
tibble with ad group metadata
Examples
## Not run: 
ad_group <- apl_get_ad_groups()
## End(Not run)
Get Ad-Level Reports
Description
Get Ad-Level Reports
Usage
apl_get_ad_report(
  org_id = apl_get_me_details()$parentOrgId,
  campaign_id = apl_get_campaigns()$id,
  start_date = Sys.Date() - 8,
  end_date = Sys.Date() - 1,
  group_by = NULL,
  granularity = c("DAILY", "HOURLY", "WEEKLY", "MONTHLY")
)
Arguments
org_id | 
 The value is your orgId.  | 
campaign_id | 
 The unique identifier for the campaign.  | 
start_date | 
 Start reporting date  | 
end_date | 
 End reporting date  | 
group_by | 
 Use the groupBy field to group responses by selected dimensions. If groupBy specifies age, gender, and geodimensions  | 
granularity | 
 The report data organized by hour, day, week, and month.  | 
Value
tibble ad report
Get Ads
Description
Get Ads
Usage
apl_get_ads(org_id = apl_get_me_details()$parentOrgId)
Arguments
org_id | 
 The value is your orgId.  | 
Value
tibble with ads metadata
Examples
## Not run: 
ad <- apl_get_ads()
## End(Not run)
Get List of Auth Cached Accounts
Description
Get List of Auth Cached Accounts
Usage
apl_get_auth_account_list()
Value
character vector with accounts name
Get All Budget Orders
Description
Get All Budget Orders
Usage
apl_get_budget_orders(org_id = apl_get_me_details()$parentOrgId)
Arguments
org_id | 
 The value is your orgId.  | 
Value
tibble with budget data
Get Campaign-Level Reports
Description
Get Campaign-Level Reports
Usage
apl_get_campaign_report(
  org_id = apl_get_me_details()$parentOrgId,
  start_date = Sys.Date() - 8,
  end_date = Sys.Date() - 1,
  group_by = NULL,
  granularity = c("DAILY", "HOURLY", "WEEKLY", "MONTHLY")
)
Arguments
org_id | 
 The value is your orgId.  | 
start_date | 
 Start reporting date  | 
end_date | 
 End reporting date  | 
group_by | 
 Use the groupBy field to group responses by selected dimensions. If groupBy specifies age, gender, and geodimensions  | 
granularity | 
 The report data organized by hour, day, week, and month.  | 
Value
tibble with report data
Examples
## Not run: 
camp_rep <- apl_get_campaign_report(
  org_id     = 2623170,
  start_date = '2025-07-20',
  end_date   = '2025-07-26',
  group_by   = 'countryOrRegion'
)
## End(Not run)
Get All Campaigns
Description
Get All Campaigns
Usage
apl_get_campaigns(org_id = apl_get_me_details()$parentOrgId)
Arguments
org_id | 
 The value is your orgId.  | 
Value
tibble with campaigns
Examples
## Not run: 
camp <- apl_get_campaigns(org_id = 2623170)
## End(Not run)
Get client secret
Description
Get client secret
Usage
apl_get_client_secret(
  client_id,
  team_id,
  key_id,
  private_key_path,
  account_name,
  cache_path = rappdirs::site_data_dir("rappleads")
)
Arguments
client_id | 
 You receive your clientId when you upload a public key.  | 
team_id | 
 The client secret is a JWT that you create and sign with your private key.  | 
key_id | 
 The value is your keyId that returns when you upload a public key.  | 
private_key_path | 
 Path to the   | 
account_name | 
 Your apple ads account name  | 
cache_path | 
 Path to the directory where cached authentication data will be stored.  | 
Value
jwt_data
Get All Creatives
Description
Get All Creatives
Usage
apl_get_creatives(org_id = apl_get_me_details()$parentOrgId)
Arguments
org_id | 
 The value is your orgId.  | 
Value
tibble with campaigns
Get Keyword-Level Reports
Description
Get Keyword-Level Reports
Usage
apl_get_keyword_report(
  org_id = apl_get_me_details()$parentOrgId,
  campaign_id = apl_get_campaigns()$id,
  start_date = Sys.Date() - 8,
  end_date = Sys.Date() - 1,
  group_by = NULL,
  granularity = c("DAILY", "HOURLY", "WEEKLY", "MONTHLY")
)
Arguments
org_id | 
 The value is your orgId.  | 
campaign_id | 
 The unique identifier for the campaign.  | 
start_date | 
 Start reporting date  | 
end_date | 
 End reporting date  | 
group_by | 
 Use the groupBy field to group responses by selected dimensions. If groupBy specifies age, gender, and geodimensions  | 
granularity | 
 The report data organized by hour, day, week, and month.  | 
Value
tibble with keyword report
Examples
## Not run: 
keyw_rep <- apl_get_keyword_report()
## End(Not run)
Get Me Details
Description
Get Me Details
Usage
apl_get_me_details()
Value
list with userId and parentOrgId
Examples
## Not run: 
me   <- apl_get_me_details()
## End(Not run)
Get Search Term-Level Reports
Description
Get Search Term-Level Reports
Usage
apl_get_search_term_report(
  org_id = apl_get_me_details()$parentOrgId,
  campaign_id = apl_get_campaigns()$id,
  start_date = Sys.Date() - 8,
  end_date = Sys.Date() - 1,
  group_by = NULL,
  granularity = c("DAILY", "HOURLY", "WEEKLY", "MONTHLY")
)
Arguments
org_id | 
 The value is your orgId.  | 
campaign_id | 
 The unique identifier for the campaign.  | 
start_date | 
 Start reporting date  | 
end_date | 
 End reporting date  | 
group_by | 
 Use the groupBy field to group responses by selected dimensions. If groupBy specifies age, gender, and geodimensions  | 
granularity | 
 The report data organized by hour, day, week, and month.  | 
Value
tibble search term report
Examples
## Not run: 
ster_rep <- apl_get_search_term_report(start_date = '2025-06-01')
## End(Not run)
Get User Access Control List
Description
Get User Access Control List
Usage
apl_get_user_acl()
Value
tibble
Examples
## Not run: 
acs  <- apl_get_user_acl()
## End(Not run)
Make API request
Description
Make API request
Usage
apl_make_request(endpoint, parser, org_id = NULL, selector = NULL)
Arguments
endpoint | 
 API endpoint  | 
parser | 
 Parser function  | 
org_id | 
 Organization ID  | 
selector | 
 Selector objects define what data the API returns when fetching resources.  | 
Value
API parsed response
Set Apple Ads Account Name
Description
Set Apple Ads Account Name
Usage
apl_set_account_name(account_name)
Arguments
account_name | 
 Your apple ads account name  | 
Value
nothing
Set Client ID
Description
Set Client ID
Usage
apl_set_client_id(client_id)
Arguments
client_id | 
 You receive your clientId when you upload a public key.  | 
Value
nothing
Set KeyID
Description
Set KeyID
Usage
apl_set_key_id(key_id)
Arguments
key_id | 
 The value is your keyId that returns when you upload a public key.  | 
Value
nothing
Set Privat Key Path
Description
Set Privat Key Path
Usage
apl_set_private_key_path(private_key_path)
Arguments
private_key_path | 
 Path to the   | 
Value
nothing
Set Team ID
Description
Set Team ID
Usage
apl_set_team_id(team_id)
Arguments
team_id | 
 The client secret is a JWT that you create and sign with your private key.  | 
Value
nothing
Set Tinezone
Description
Set Tinezone
Usage
apl_set_timezone(timezone)
Arguments
timezone | 
 You set the default timeZone during account creation through the Apple Search Ads UI. ORTZ (organization time zone) is the default. Possible Values: ORTZ, UTC  | 
Value
nothing
Make request selector
Description
Make request selector
Usage
make_selector(
  start_date = Sys.Date() - 8,
  end_date = Sys.Date() - 1,
  granularity = c("DAILY", "HOURLY", "WEEKLY", "MONTHLY"),
  sort_field = "startTime",
  time_zone = getOption("apl.time_zone"),
  group_by = NULL,
  part = NULL
)
Arguments
start_date | 
 start report date  | 
end_date | 
 end report date  | 
granularity | 
 The report data organized by hour, day, week, and month.  | 
sort_field | 
 Specify a field name and grouping to sort the records by ASCENDING or DESCENDING.  | 
time_zone | 
 You set the default timeZone during account creation through the Apple Search Ads UI. ORTZ  | 
group_by | 
 Use the groupBy field to group responses by selected dimensions. If groupBy specifies age, gender, and geodimensions  | 
part | 
 Part of selector  |