Backpage.com Bulk Upload Format
Introduction
If you have an existing RSS feed on your site in place and understand the basics of RSS and its syntax, you can easily migrate to Backpage.com's RSS feed format.
It is important to note the basic differences between RSS 1.0 and RSS 2.0, and to determine which version you are using. For information on these, please see the following sites:
www.rssfeeds.com
W3C RSS Tutorial
We begin with a basic formatting and will add some custom fields later in the example:
RSS 1.0 Example
<?xml version="1.0"?>
<rdf:RDF xmlns="http://purl.org/rss/1.0/"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:backpage="http://www.backpage.com/rss/1.0">
<channel>
<items>
<rdf:li rdf:resource="155213"/>
<rdf:li rdf:resource="155214"/>
</items>
<backpage:import user="myname@mydomain.com"
site="http://newyork.backpage.com" />
</channel>
<item rdf:about = "155213">
<backpage:id>155213</backpage:id>
<backpage:category>ApartmentsForRent</backpage:category>
<backpage:replyEmail>advertiser1@myDomain.com</backpage:replyEmail>
<backpage:allowReplies>No</backpage:allowReplies>
<backpage:superRegion>Manhattan</backpage:superRegion>
<backpage:region>New York City</backpage:region>
<backpage:adPlacedBy>Agency/Locator Service</backpage:adPlacedBy>
<backpage:feeStatus>Fee</backpage:feeStatus>
<backpage:bedrooms>2</backpage:bedrooms>
<backpage:price>345.66</backpage:price>
<backpage:mapAddress>202 Mockingbird Lane</backpage:mapAddress>
<backpage:mapZip>85716</backpage:mapZip>
<title>OPEN HOUSE! UNDERPRICED 1BD/1BA/RENOVATED!</title>
<description><![CDATA[
Ad copy here...
]]></description>
</item>
<item rdf:about = "155214">
<backpage:id>155214</backpage:id>
<backpage:category>ApartmentsForRent</backpage:category>
<backpage:replyEmail>advertiser2@myDomain.com</backpage:replyEmail>
<backpage:allowReplies>Anonymous</backpage:allowReplies>
<backpage:superRegion>Bronx</backpage:superRegion>
<backpage:region>Parkchester Bronx 6 Train</backpage:region>
<backpage:adPlacedBy>Owner/Property Manager</backpage:adPlacedBy>
<backpage:feeStatus>No Fee</backpage:feeStatus>
<backpage:bedrooms>4</backpage:bedrooms>
<backpage:price>1150.00</backpage:price>
<backpage:mapAddress>Metropolitan at mcgraw</backpage:mapAddress>
<backpage:mapZip>10462</backpage:mapZip>
<title>Gramercy / 2 Bed / NO FEE / ***VIRTUAL TOUR***</title>
<description><![CDATA[
Ad copy here...
]]></description>
</item>
</rdf:RDF>
RSS 2.0 Example
<?xml version="1.0" encoding="ISO-8859-1" ?>
<rss version="2.0" xmlns:content="http://blogs.law.harvard.edu/tech/rss"
xmlns:backpage="http://www.backpage.com/rss/2.0">
<channel>
<backpage:import user="myname@mydomain.com" site="http://newyork.backpage.com" />
<item>
<backpage:id>155213</backpage:id>
<backpage:category>ApartmentsForRent</backpage:category>
<backpage:replyEmail>advertiser1@myDomain.com</backpage:replyEmail>
<backpage:allowReplies>No</backpage:allowReplies>
<backpage:superRegion>Manhattan</backpage:superRegion>
<backpage:region>New York City</backpage:region>
<backpage:adPlacedBy>Agency/Locator Service</backpage:adPlacedBy>
<backpage:feeStatus>Fee</backpage:feeStatus>
<backpage:bedrooms>2</backpage:bedrooms>
<backpage:price>345.66</backpage:price>
<backpage:mapAddress>202 Mockingbird Lane</backpage:mapAddress>
<backpage:mapZip>85716</backpage:mapZip>
<title>OPEN HOUSE! UNDERPRICED 1BD/1BA/RENOVATED!</title>
<description><![CDATA[
Ad copy here...
]]></description>
</item>
<item>
<backpage:id>155214</backpage:id>
<backpage:category>ApartmentsForRent</backpage:category>
<backpage:replyEmail>advertiser2@myDomain.com</backpage:replyEmail>
<backpage:allowReplies>Anonymous</backpage:allowReplies>
<backpage:superRegion>Bronx</backpage:superRegion>
<backpage:region>Parkchester Bronx 6 Train</backpage:region>
<backpage:adPlacedBy>Owner/Property Manager</backpage:adPlacedBy>
<backpage:feeStatus>No Fee</backpage:feeStatus>
<backpage:bedrooms>4</backpage:bedrooms>
<backpage:price>1150.00</backpage:price>
<backpage:mapAddress>Metropolitan at mcgraw</backpage:mapAddress>
<backpage:mapZip>10462</backpage:mapZip>
<title>Gramercy / 2 Bed / NO FEE / ***VIRTUAL TOUR***</title>
<description><![CDATA[
Ad copy here...
]]></description>
</item>
</channel>
</rss>
^ Back to Top
The Details
Backpage.com will work with either RSS 1.0 or RSS 2.0 feeds. The following information documents the declarations, the common RSS elements, and the Backpage specific namespace elements.
Declarations
For RSS 1.0:
<rdf:RDF xmlns="http://purl.org/rss/1.0/"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:backpage="http://www.backpage.com/rss/1.0">
For RSS 2.0:
<rss version=""innerAttrib">2.0" xmlns:content="http://blogs.law.harvard.edu/tech/rss"
xmlns:backpage="http://www.backpage.com/rss/2.0">
Required RSS Elements
- <title> - The title (or headline) of the ad. The title is limited to 100 characters and can not contain any HTML.
Example:
<title>Central Park View Apartment for Rent</title>
- <description> - The ad itself. HTML is permitted. Please wrap the ad within a CDATA section.
Example:
<description><![CDATA[
<p><b>Central Park View!</b></p>
<p>Additional copy about the apartment would go here.</p>
]]></description>
Required Backpage Elements
The following elements are all required:
- <backpage:import> - Import is a required element with two values: user and site. The user value should be the email address matching your bulk upload account. The site value should be the root URL for the site the ads are being imported into. Note: the import element is part of the <channel> not <item>.
Example:
<backpage:import user="myname@mydomain.com"
site="http://newyork.backpage.com" />
- <backpage:id> - A unique id tied to the ad. This id will allow you to update ads in the database with matching ids.
Example:
<backpage:id>155214</backpage:id>
- <backpage:category> - Category is a required element that matches a specific Backpage.com category key. For a full list of keys, please refer to the category key section below.
Example:
<backpage:category>ApartmentsForRent</backpage:category>
- <backpage:replyEmail> - The email that should be associated with this ad and optionally used for replies. This element is required.
Example:
<backpage:replyEmail>support@backpage.com</backpage:replyEmail>
- <backpage:allowReplies> - Specifies if this ad allows replies directly to the reply email, allows replies but does so anonymously thus masking the reply email, or doesn't allow replies at all. This element is required. The possible values are: Show Email, Anonymous, and No.
Example:
<backpage:allowReplies>Anonymous</backpage:allowReplies>
- <backpage:superRegion> - The super region the ad should be associated with. Possible values are Bronx, Brooklyn, Long Island, Manhattan, New York, Queens, Staten Island, New Jersey and Other. This element is required.
Example:
<backpage:superRegion>Queens</backpage:superRegion>
- <backpage:region> - The region the ad should be associated with. This element is required.
Example:
<backpage:region>Forest Hills</backpage:region>
Additional Backpage Elements
The following elements are either optional or conditionally required based on the category the ad is to appear within. HTML is not permitted within any element, and all values are limited to 255 characters.
- <backpage:adPlacedBy> - The ad placed by element is a Rentals and Real Estate specific element. Possible values are: Owner/Property Manager, Agency/Locator Service. It is required for the category of ApartmentsForRent. It is optional for all other categories.
Example:
<backpage:adPlacedBy>Agency/Locator Service</backpage:adPlacedBy>
- <backpage:feeStatus> - The fee status element is a Rentals and Real Estate specific element. Possible values are: Fee, No Fee. It is required for the category of ApartmentsForRent. It is optional for all other categories.
Example:
<backpage:feeStatus>Fee</backpage:feesStatus>
- <backpage:bedrooms> - Optional element. Possible values: Studio, 1, 2, 3, 4, 5, 6, 7, 8.
Example:
<backpage:bedrooms>2</backpage:bedrooms>
- <backpage:roommates> - Optional element. Possible values: Male Only, Male Preferred, Female Only, Female Preferred, Male or Female OK.
Example:
<backpage:roommates>Female Only</backpage:roommates>
- <backpage:mapAddress> - Optional element. If used, the <backpage:mapZip> element needs to be used as well.
Example:
<backpage:mapAddress>202 Mockingbird Lane</backpage:mapAddress>
- <backpage:mapZip> - Optional element. If used, the <backpage:mapAddress> element needs to be used as well.
Example:
<backpage:mapZip>10003</backpage:mapZip>
- <backpage:petsAccepted> - Optional element. Multiple values allowed. Possible values: Cats Ok, Dogs Ok.
Example:
<backpage:petsAccepted>Cats Ok</backpage:petsAccepted>
<backpage:petsAccepted>Dogs Ok</backpage:petsAccepted>
- <backpage:price> - Optional element. Non-negative decimal values only.
Example:
<backpage:price>1150.00</backpage:price>
- <backpage:contactPhone> - Optional element.
Example:
<backpage:contactPhone>555-867-5309</backpage:contactPhone>
- <backpage:age> - Optional element. Non-negative integer greater than 18.
Example:
<backpage:age>27</backpage:age>
- <backpage:workStatus> - Optional element. Possible values: Full-time, Part-time, Temp/Contract, Internship. Multiple values allowed.
Example:
<backpage:workStatus>Full-time</backpage:workStatus>
<backpage:workStatus>Part-time</backpage:workStatus>
- <backpage:shift> - Optional element. Possible values: Days, Nights, Weekends. Multiple values allowed.
Example:
<backpage:shift>Nights</backpage:shift>
<backpage:shift>Weekends</backpage:shift>
- <backpage:education> - Optional element.
Example:
<backpage:education>Bachelor's Degree</backpage:education>
- <backpage:salary> - Optional element.
Example:
<backpage:salary>$18/hour to start</backpage:salary>
^ Back to Top
Putting it all together
The following shows an example of merging an existing RSS 2.0 feed with the additional Backpage Elements:
<?xml version="1.0" encoding="ISO-8859-1" ?>
<rss version="2.0" xmlns:content="http://blogs.law.harvard.edu/tech/rss"
xmlns:backpage="http://www.backpage.com/rss/2.0">
<channel>
<title>backpage.com | rentals | new york, ny</title>
<webMaster>support@backpage.com</webMaster>
<link>http://newyork.backpage.com/rentals/classifieds/Results?adLanguage=All§ion=4376</link>
<description>New York classifieds. Post free ads for apartments, houses for rent, jobs, furniture, appliances, cars, pets for sale and personals.</description>
<language>en-us</language>
<lastBuildDate>Fri, 26 Jan 2007 15:38:41 -0500</lastBuildDate>
<copyright>Copyright 2007, Village Voice</copyright>
<ttl>120</ttl>
<backpage:import user="myname@mydomain.com" site="http://newyork.backpage.com" />
<item>
<backpage:id>155213</backpage:id>
<backpage:category>ApartmentsForRent</backpage:category>
<backpage:replyEmail>advertiser1@myDomain.com</backpage:replyEmail>
<backpage:allowReplies>No</backpage:allowReplies>
<backpage:superRegion>Manhattan</backpage:superRegion>
<backpage:region>New York City</backpage:region>
<backpage:adPlacedBy>Agency/Locator Service</backpage:adPlacedBy>
<backpage:feeStatus>Fee</backpage:feeStatus>
<backpage:bedrooms>2</backpage:bedrooms>
<backpage:price>345.66</backpage:price>
<backpage:mapAddress>202 Mockingbird Lane</backpage:mapAddress>
<backpage:mapZip>85716</backpage:mapZip>
<pubDate>Fri, 26 Jan 2007 15:38:38 -0500</pubDate>
<link>http://newyork.backpage.com/rentals/classifieds/ViewAd?oid=1846585</link>
<title>OPEN HOUSE! UNDERPRICED 1BD/1BA/RENOVATED!</title>
<description><![CDATA[
Ad copy here...
]]></description>
</item>
<item>
<backpage:id>155214</backpage:id>
<backpage:category>ApartmentsForRent</backpage:category>
<backpage:replyEmail>advertiser2@myDomain.com</backpage:replyEmail>
<backpage:allowReplies>Anonymous</backpage:allowReplies>
<backpage:superRegion>Bronx</backpage:superRegion>
<backpage:region>Parkchester Bronx 6 Train</backpage:region>
<backpage:adPlacedBy>Owner/Property Manager</backpage:adPlacedBy>
<backpage:feeStatus>No Fee</backpage:feeStatus>
<backpage:bedrooms>4</backpage:bedrooms>
<backpage:price>1150.00</backpage:price>
<backpage:mapAddress>Metropolitan at mcgraw</backpage:mapAddress>
<backpage:mapZip>10462</backpage:mapZip>
<pubDate>Fri, 26 Jan 2007 15:38:31 -0500</pubDate>
<link>http://newyork.backpage.com/rentals/classifieds/ViewAd?oid=1846599</link>
<title>Gramercy / 2 Bed / NO FEE / ***VIRTUAL TOUR***</title>
<description><![CDATA[
Ad copy here...
]]></description>
</item>
</channel>
</rss>
The following shows an example of merging an existing RSS 1.0 file with the additional Backpage elements:
<?xml version="1.0"?>
<rdf:RDF xmlns="http://purl.org/rss/1.0/"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:cl="http://www.craigslist.org/about/cl-bulk-ns/1.0"
xmlns:backpage="http://www.backpage.com/rss/1.0">
<channel>
<items>
<rdf:li rdf:resource="155213"/>
<rdf:li rdf:resource="155214"/>
</items>
<cl:auth username="username"
password="password"
accountID="123456"/>
<backpage:import user="yorick@y.com"
site="http://newyork.backpage.com" />
</channel>
<item rdf:about = "155213">
<backpage:id>155213</backpage:id>
<cl:category>fee</cl:category>
<cl:area>nyc</cl:area>
<cl:subarea>mnh</cl:subarea>
<cl:neighborhood>Clinton</cl:neighborhood>
<cl:housingInfo price="1850"
bedrooms="1" />
<cl:replyEmail privacy="C">nona@anchornyc.com</cl:replyEmail>
<cl:brokerInfo companyName="Anchor Associates"
feeDisclosure="Broker Fee Apartment" />
<backpage:category>ApartmentsForRent</backpage:category>
<backpage:replyEmail>kelsie@sandman.net</backpage:replyEmail>
<backpage:allowReplies>No</backpage:allowReplies>
<backpage:superRegion>Manhattan</backpage:superRegion>
<backpage:region>New York City</backpage:region>
<backpage:adPlacedBy>Agency/Locator Service</backpage:adPlacedBy>
<backpage:feeStatus>No Fee</backpage:feeStatus>
<backpage:bedrooms>2</backpage:bedrooms>
<backpage:price>345.66</backpage:price>
<backpage:mapAddress>202 S. Tucson Blvd</backpage:mapAddress>
<backpage:mapZip>85716</backpage:mapZip>
<title>OPEN HOUSE! UNDERPRICED 1BD/1BA/RENOVATED! W50?S</title>
<description><![CDATA[
Ad copy here...
]]></description>
</item>
<item rdf:about = "155214">
<backpage:id>155214</backpage:id>
<cl:category>nfb</cl:category>
<cl:area>nyc</cl:area>
<cl:subarea>mnh</cl:subarea>
<cl:neighborhood>Gramercy Park</cl:neighborhood>
<cl:housingInfo price="2700"
bedrooms="2"
CatsOK="1"
DogsOK="1" />
<cl:replyEmail privacy="C">darren@anchornyc.com</cl:replyEmail>
<cl:brokerInfo companyName="Anchor Associates"
feeDisclosure="No-Fee Apartment" />
<backpage:category>ApartmentsForRent</backpage:category>
<backpage:replyEmail>yyy@yahoo.com</backpage:replyEmail>
<backpage:allowReplies>Anonymous</backpage:allowReplies>
<backpage:superRegion>Bronx</backpage:superRegion>
<backpage:region>parkchester bronx 6 train</backpage:region>
<backpage:adPlacedBy>Owner/Property Manager</backpage:adPlacedBy>
<backpage:feeStatus>No Fee</backpage:feeStatus>
<backpage:bedrooms>4</backpage:bedrooms>
<backpage:price>1150.00</backpage:price>
<backpage:mapAddress>metropolitan at mcgraw</backpage:mapAddress>
<backpage:mapZip>10462</backpage:mapZip>
<title>20's&3rd / Gramercy / 2 Bed / NO FEE / ***VIRTUAL TOUR***</title>
<description><![CDATA[
Ad copy...
]]></description>
</item>
</rdf:RDF>
^ Back to Top
Validating
Before uploading your RSS feed, it may be helpful to validate it to check for errors. RSS is sensitive about typos, and one small mistake could cause an entire sheet to not work.
The W3C as a validation tool here for RSS feeds, either online or direct code.
^ Back to Top
Submitting Your Feed
There are three options to submit your RSS feeds to Backpage.com:
Option 1: Use the interactive bulk uploader
This is highly recommended for first time use and the best choice to help you validate your feed. To use this method, login into your bulk upload account and follow the on-screen instructions.
To login to your account now, click here:
http://newyork.backpage.com/online/bulkupload/index
Option 2: Posting an HTTP feed
This process is typically used for scripting your own solution. To use this method you will need to POST your feed to the following URL:
http://posting.newyork.backpage.com/online/BulkUpload/PostAds
The required parameters are:
- email - The email address of the account.
- password - The password for the account
- url - The RSS feed you are posting.
Example:
<form name="uploadForm"
method="post"
action="http://posting.newyork.backpage.com/online/BulkUpload/PostAds">
Email: <input type="text" name="email">
Pass: <input type="text" name="password">
Url: <input type="text" name="url">
<input type="submit">
</form>
Option 3: Local file via a HTTP Post
This process is typically used for scripting your own solution. To use this method you will need to POST your feed to the following URL:
http://posting.newyork.backpage.com/online/BulkUpload/PostAds
The required parameters are:
- email - The email address of the account.
- password - The password for the account
- importFile - The RSS feed you are posting.
The following perl script will illustrate this method in greater detail.
#!/usr/bin/perl -w
use strict;
use Getopt::Long;
use LWP::UserAgent;
use HTTP::Request::Common;
# ----------------------------------------------------------------------
my $server = 'newyork.backpage.com';
my($email, $password, $filename, $outputfile) = process_command_line();
# You may choose to hard-code $email and $password here instead
# $email = 'your@email.address';
# $password = 'your password';
# ----------------------------------------------------------------------
my $ua = LWP::UserAgent->new();
$ua->agent(qq|Backpage Form Upload Client ($email)|);
my @parameters = ( email => $email,
password => $password,
importFile => [ $filename ],
quiet => 'yes' );
my $url = "http://posting.$server/online/BulkUpload/PostAds";
my $req = POST($url, Content_Type => 'form-data',
Content => \@parameters );
# $req->content_type('multipart/form-data');
my $response = $ua->request($req);
if ($response->is_success()) {
my $output = $response->content();
$output =~ s/^[\s\.]+//; # remove leading whitespace and marching dots
if ($outputfile) {
open(FILE,">$outputfile")
or die(qq|Couldn't write output to "$outputfile", $!|);
print FILE $output;
close FILE;
}
else { print $output; }
}
else {
print "HTTP request failed:\n";
print $response->status_line() . "\n";
exit 1;
}
# ----------------------------------------------------------------------
sub process_command_line {
my($email, $password, $filename, $outputfile);
GetOptions( 'email=s' => \$email,
'password=s' => \$password,
'filename=s' => \$filename,
'output=s' => \$outputfile );
my @errors;
if (not $filename) { push(@errors, qq|missing --filename parameter|); }
elsif (not -f $filename) { push(@errors, qq|"$filename" does not exist|); }
elsif (not -r $filename) { push(@errors, qq|"$filename" is not readable|); }
if (@errors) {
print <<"EOQ";
usage: $0
--filename="\$filename" (required)
--email="\$email"
--password="\$password"
--output="\$outputfile" (optional)
EOQ
foreach my $error (@errors) { print qq| error: $error\n|; }
exit 1;
}
return($email, $password, $filename, $outputfile);
}
# ----------------------------------------------------------------------
The HTTP Post Response for options 2 and 3 will return the following:
<?xml version="1.0"?>
<importResults>
<userKey>11c1a37e</userKey>
<newAdCount>10</newAdCount>
<updatedAdCount>42</updatedAdCount>
<importError>If there was an error it would be here.</importError>
<importError>If there was a second error it would be here.</importError>
</importResults>
^ Back to Top
Accessing Imported Ads by URL
If you have the need to manually access imported ads, there are two options:
Option 1: Click here to use the verification link retrieval form.
Option 2: Construct a direct link by using the following syntax:
http://nyc.backpage.com/post/userKey-adID
The userKey is static and can be found in the post response after importing.
Specifically in the <userKey> element.
The adID is the unique ad id that was provided for the <backpage:id> element.
In the following examples, the userKey is "11c1a37e". The ad ids are "272209", "272210", "272242".
http://nyc.backpage.com/post/11c1a37e-272209
http://nyc.backpage.com/post/11c1a37e-272210
http://nyc.backpage.com/post/11c1a37e-272242
^ Back to Top
Category Key
adult entertainment
- AdultJobs
- BodyRubs
- Datelines
- Domination
- FemaleEscorts
- MaleEscorts
- TranssexualEscorts
automotive
- AutosForSale
- AutoPartsForSale
- AutoServices
buy, sell, trade
- AntiquesForSale
- AppliancesForSale
- ClothingForSale
- ElectronicsForSale
- Free
- FurnitureForSale
- MiscForSale
- BoatsForSale
- PetsForSale
- SportsEquipForSale
- TicketsForSale
- ToolsForSale
- WantedTrade
- YardSale
community
- Childcare
- Classes
- Events
- GeneralCommunity
- Groups
- LostAndFound
- Volunteers
jobs
- AccountingJobs
- AdminOfficeJobs
- Auditions
- CustomerServiceJobs
- DomesticJobs
- DriverJobs
- EducationJobs
- FocusGroups
- JobWanted
- MedicalHealthJobs
- ManagementJobs
- RestaurantRetailJobs
- SalesJobs
- SalonJobs
- MiscJobs
- ComputerJobs
- TradesJobs
musician
- MusicEquipForSale
- MusicianServices
- MusicianWanted
- MusicInstruction
- PlugBand
personals
- MenSeekMen
- MenSeekWomen
- MissedConnections
- NoStringsAttached
- WomenSeekMen
- WomenSeekWomen
real estate for sale
- CommercialForSale
- CondosForSale
- LandForSale
- MiscRealEstate
- HomesForSale
- RealEstateWanted
rentals
- CommercialForRent
- MiscForRent
- RentalsWanted
- Roommates
- ApartmentsForRent
- Sublets
- VacationForRent
services
- BizOpps
- BusinessServices
- CleaningServices
- ComputerServices
- CreativeServices
- FinancialServices
- HealthServices
- LaborMoving
- LegalServices
- MiscServices
- CarpentryPaintServices
- RealEstateServices
- TherapeuticMassage
- LawnServices
^ Back to Top