The Deceitful “Bait-and-Switch” Tactics of Auto Dealership Prize Giveaways

Jokers WildI receive unsolicited prize giveaways in the mail all the time, mostly from regional auto dealerships trying to promote their inventory and overstock. The tactics used to entice the recipient into reading and reacting to the send-out can be both entertaining and aggressive. The goal of these mailings is naturally to maximize consumer response and get as many people as possible through the doors to sell them vehicles. For this reason, everybody wins!

Some dealership promotions come enclosed in very important looking “NextDay Verified Fast-Tracked Mail” envelopes designed to mimic actual overnight services while still being sent regular media mail (complete with handwritten jargon about there being crucial documents inside.) Others come with a generic key that must be checked against a lock box at the dealership.  Almost all of them include some variant of a scratch-off or pull-tab ticket with some fantastic prizes on the table.

Although they are all the same in the end (the “prize” you get to claim is rarely ever worth the trip), I have found some to be far more deceptive and misleading than others. As such, I’ll classify these mailers into two categories…

The ‘Honestly Hopeless’ Prize Giveaways

Two Dollar BillIf you receive a flyer for any sort of event within 25-100 miles of your address and it includes any gambling-inspired game for you to “play-to-win”, rest assured you will be a “winner” every time. The majority of marketing flyers that I receive, as sensational as they are, have still been honest in their identification of what you’ve won, the fine-print and the abysmal yet accurate odds of winning any of the non-trivial prizes.

By that, I mean that at least 99,997 of 100,000 send-outs will contain the same identical winning ticket and its value is typically not worth the money in gas to claim. Assuming they send out 100,000 flyers and are true to their word, only three of those 100,000 stand to win anything beyond a couple dollars in cash or a restrictive gift card.

In these more honest flyers, you scratch off the play area or otherwise reveal that you have a winning ticket, such as by matching three like symbols in a row. Comparing the ticket results to the prize legend will inevitably reveal that you have won $2 or something of similar monetary value. To claim it, you must visit the dealership during the aforementioned promotion.

NextDay PromotionHere is a rundown of what happened the last time I went to claim my $2 prize from these sort of giveaways, and what you should expect:

  1. I arrive at the dealership to a hoard of salespeople roaming about. Immediately I walk past the crowd and into the tent.
  2. I show a staff member my winning ticket and advise them I am there to collect the prize (all $2 of it).
  3. The salesperson says he will go get the cash but it could take awhile and suggests I look around the lot while waiting. I respectfully decline and tell him I’ll just wait right there.
  4. Minutes pass and eventually he comes back with a crisp $2 bill. I thank him and start to leave.
  5. But before you go, ” he remarks, “we are having a $500 giveaway tomorrow and it is free to enter, interested?”
  6. Hmm, OK?” – Now I’m on the hook. He tells me he just needs to take down my information so I can be reached if I win.
  7. I am now put through a fairly rigorous survey that asks everything about my current vehicle, what kinds of vehicles I may be interested in, what my financial abilities are for loans, how much I could afford a month and so on.
  8. After repeatedly insisting that I am unwilling to put anything toward a new vehicle at this time, despite how low of a figure he goes down to and how much he talks about them having the perfect vehicle for me, he finally concedes and ends the survey.
  9. I leave (and no, I did not win the prize).

All told, it took around 15 minutes to claim my $2 prize and over a half hour until I was finally out of there after entering the large cash giveaway (which, like most free things a person signs up for, probably also resulted in more marketing materials coming my way). If you live less than a mile away from one of these dealerships and don’t stick around past receiving your small monetary prize, and have some time to kill, you can almost break even.

The ‘Deceptively Hopeful’ Prize Giveaways

Some promotional flyers I receive are much more misleading about the alleged prize won. With these types of marketing materials, all indications are that you have won a significant prize and that you are one out of 100,000 to get so lucky. I will give a detailed rundown of a recent flyer that I received and acted upon.


Jokers WildThis flyer came with a pull-tab game not unlike those you’d see in the corner of a tavern. As you can see, this prize giveaway is so extreme that it has to be “QR CODE PROTECTED,” whatever that actually means (it’s a 40 character string that I suspect is identical on everyone’s card). The prize legend seems pretty straight-forward, as depicted below.

The prize legend for the Jokers Wild game.

The prize, odds of winning and verifiable retail value are listed for each of the four rows.

  • YELLOW: $50,000 Cash – 1:100,000 ($50,000 Retail Value)
  • GREEN: 55″ 4K TV – 1:100,000 ($1,500 Retail Value)
  • PURPLE: Apple iPad Pro – 1:100,000 ($1,000 Retail Value)
  • BLUE: $25 Gift Card – 99,997:100,000 ($25 Retail Value)

Simple math confirms that everybody is a winner. There is a 99.997% chance of winning the $25 gift card, which means that this is the prize all but three people of 100,000 will win. It is identical to the $2 odds in the previously described giveaway. The remaining three, with a 0.001% chance each, will supposedly win either the cash prize, iPad or 4K television.

With that in mind, imagine my delight when I pull the tabs and see this:

Jokers Wild

Four green jokers in one game! Yes! Surely this means I won the 4K TV, right?! It seemed pretty apparent from the legend that this was the case, at least.

Jokers WildSo excited was I about this win (OK, there might be a hint of sarcasm there), that I got in touch with a friend to share the great news. “Well what do you know? I got the same matching green jokers in game 1! In fact, our cards are identical for both games.

How could this be,” I thought. Only one person in 100,000 was supposed to win the 4K television, and the odds of that happening were astronomically low. I skimmed over the the fine print. Did it require us to purchase a car before claiming the prize? “NO PURCHASE NECESSARY TO ENTER OR WIN. PURCHASE DOES NOT INCREASE CHANCES OF WINNING.” Apparently not.

I dialed up the number on the front and entered my confirmation code as it instructed me to do. Rather than getting any confirmation about my prize, the automated machine instead began asking a series of questions relating to the purchase of a new vehicle, special loan rates etc. I hung up. There was one other line in the small-print that caught my attention: “Bring invitation to event location to compare your confirmation code to prize board to determine your prize.

Unfortunately, it would be nearly a 100 mile round trip, completely out of my way from anything, to get my prize. Still, the 4K TV would more than make up for the loss of gas and time (again, maybe a trace of sarcasm here). So, after printing off some relevant state statute codes on prize giveaways, off I went.

Here is a rundown of what happened when I went to claim my 4K television that the prize legend suggested I had won.

  1. I arrive at the dealership, park and walk in. For an event that professed “overwhelming response” and imposed a strict “1 vehicle per family” rule in their marketing, they sure had a lot of cars for sale, and not many visitors.
  2. I go up to the counter and tell the employee or manager that the legend indicates I won a 4K TV with the green jokers and would like to claim the prize.
  3. He says “give me a minute and we’ll see what you’ve won.” So I wait patiently, while pointing out once again that all indications from the flyer is that four green jokers would win a television.
  4. Before confirming my prize for me, I was told to take a seat at a table and wait. Eventually he came over and began giving me the same sort of survey that all the others give about my current vehicle, what I’m looking for, etc. I again advised him I was not looking for any vehicle nor would I be purchasing one, but I was there to claim the prize.
  5. Following is an excerpt of our conversations about my anticipated prize:

    ME: Looking at the legend, you can see four greens equals win–55″ HD TV right?

    DEALER: Well, all green can win this, can win this, can win this… All the color codes, sometimes they’re all yellow, sometimes they’re all purple, sometimes they’re all green… You can win any of these prizes, not just that.

    ME: I mean, do you see the misleading part here then?

    DEALER: …I can kind of understand that, but I see these every day and they’re all like that. They can tell you you’ve won the world–if you ever get one of these again, there’s only one way to determine what you win…

    ME: You know there’s legislature against misleading giveaways–

    DEALER: Well, this was sent to the state attorney’s office before it was sent to you, and they had to OK it.

  6. After more than five more minutes of back-and-forth, he asked if I was looking to buy a new car. After telling him “no,” we finally get up and go to the “prize board” to compare the code.
  7. My code shockingly did not match any of the big listed prizes, including that for the TV. Instead it fell under the “All Other Numbers” section for the $25 gift card.
  8. After more standing around waiting for him to walk to the opposite end of the building, eventually he brought back my $25 gift card. (These $25 gift cards actually cost $10 to purchase and have some pretty rigid use-cases.)

So that’s it. By adding the clause that the actual prize is determined by the prize board, and despite heavily suggesting that four greens equate to the 4K TV, it seems dealerships are able to scrape by the legal standards required to send these out. If you are curious about where dealerships purchase these sort of flyers, check out for one example, which sells a massive variety of scratch-off, pull-tab and other “game winning” flyers for dealerships in bulk for pennies a piece (with 10,000 minimum in most cases).

One should question, however, how unscrupulous a company might be when they rely on sensationalism and deception to get people through their doors in the first place (and when they justify said actions merely because the state attorney cleared them). If the flyer was this misleading, I would believe that any deals brokered with the same company would be equally suspect.  Others feel the same way, based on the steady stream of 1-star ratings this company received in the days and weeks immediately following this “promotion,” totaling nearly half of all reviews received since their inception and dropping their overall rating substantially.

Jokers Wild

Curiously, even if the number from the flyer did match, this prize board suggests that you would still only have “a chance to win” the listed prizes.

Fix for Xbox One Wireless Adapter Not Working in Windows 10 – “XBOX ACC” Driver

Xbox One Wireless Adapter for WindowsWhen I received the new Oculus Rift last month, one of the bundled accessories was a wireless Xbox One controller with a wireless USB adapter. Curiously, despite my system being completely up-to-date, the plug-and-play driver installation was never able to succeed correctly. I have seen similar issues pop up occasionally on Facebook and other discussion groups.

The official Microsoft support link on troubleshooting the wireless adapter suggest a wide range of potential solutions, none-of-which helped in my situation. At the end of the first solution that most closely matched my issue (“The adapter didn’t auto-install“), Microsoft tells the reader to attempt the uninstall/update process once more and “if this doesn’t work, your adapter needs to be replaced.” Luckily that isn’t really the case and the fix only takes a moment to apply.


  • The Xbox Home button on the controller continues to slowly pulse when powered on, never staying solid.
  • The Xbox One controller does not appear in Devices and Printers.
  • The LED light on the adapter does not come on at all when plugged in, even after pressing Sync button.
  • The Device Manager shows an “XBOX ACC” entry in Other Devices with an explanation mark.


In short, you’ll need to manually download compatible drivers on Microsoft’s site and then update the missing device drivers accordingly. Sadly, Microsoft does a fantastic job of hiding these files deep within their site. The main Software Downloads page for the controller only includes links to the user guide and specs sheet, no drivers. Microsoft assumes that the plug-and-play adapter will install without issue—and in many cases I’m sure they are correct, just not always.

The only official way to get at these drivers is through Microsoft’s Software Catalog site, which begrudgingly restricts its usage to Internet Explorer browsers. That said, here’s a quick way to get what you need and have your controller up and running in minutes!

Downloading the Correct Drivers

  1. First, determine whether you are using a 32-bit or 64-bit operating system. You can press Windows Logo + Pause/Break if you need to verify your system type.
  2. With that information in mind, launch Internet Explorer (important) and navigate to:
  3. The results should be sorted by Last Updated; the top two results correspond to the latest adapter drivers for 32/64-bit machines:
    1. If your operating system is 32-bit, click the “Add” button next to the lower of the two versions (i.e.,
    2. If your operating system is 64-bit, click the “add” button next to the higher of the two versions (i.e.,
The top two results at the provided link will be for the 32 and 64-bit drivers for the Xbox One Wireless Adapter.

The top two results will be for the 32/64-bit drivers for the Xbox One Wireless Adapter. Click Add next to the correct one for your system.

  1. Once the correct driver has been added to your download basket, click on View Basket (1) in the top-right of the page.
  2. On the following page, verify your selection and then click Download.
  3. Click “Browse” and navigate to the temporary location you wish to download the drivers to; the Desktop is just fine.
  4. Click Continue and once the download lists as “Done” you can close all Internet Explorer windows.
  5. Finally, navigate to the downloaded file. It will have a .cab extension. Open this file in 7-Zip or WinRAR and extract its contents somewhere.

Updating the Wireless Adapter Drivers

  1. Plug the wireless adapter into any USB port on your computer; you should hear a sound effect. If the Device Setup window appears, wait until it is finished.
  2. Go into the Device Manager (Windows Key + Pause/Break > Device Manager).
  3. You should see XBOX ACC listed under Other Devices. Right-click this entry and select Update Driver Software.
  4. Click on Browse my computer for driver software.
  5. Click “Browse” and navigate to where you previously extracted the .cab files to. Then click OK and Next.
  6. The proper driver should then install and within a few seconds you’ll get the message that the driver has been successfully updated. Click Close.

Xbox One Wireless Adapter Driver Update

The device will then show up as Xbox Wireless Adapter for Windows under the Network Adapters category of devices.

Xbox One Wireless Adapter

Syncing the Controller with the Adapter

Chances are you can now turn on your Xbox controller by holding the Home button in until it lights up; after a few pulses it should auto-sync with the now functional USB adapter. If the Home button light does not become solid or otherwise behaves peculiarly in Windows, try re-syncing it as follows:

  1. Press and hold the Sync button on the adapter until it starts flashing.
  2. Once the adapter is flashing, press and hold the Xbox controller bind button front of the controller until the Xbox Home light flashes rapidly.
  3. In a moment, the light on both the adapter and the controller should light solid. You are all set!

Finally, consider downloading Xbox Accessories from the Windows Store to fully customize the gaming controller and update its firmware.

Note that I have seen a few people report issues using the wireless adapter in USB 3.0 ports. I have never experienced this issue on my machine and don’t think you will either (it is rated for use in either). Of course, there is no harm in using a USB 2.0 port if needed.

Project Postmortem: Panasonic VIERA Connect (3)

Apple Muncher IconThis is the third of a four-part story documenting my somewhat excruciating and wholly uncharted experience developing an indie game for Panasonic’s obscure VIERA Connect television app market several years ago.

In the first part of this postmortem, I detailed the pains of becoming a VIERA Connect third party developer and struggles of setting up the rigid development environment required by Panasonic.

In the second part, I documented the development process of actually creating a game using the often restrictive VIERA Connect framework.

Time to Submit the App!

Panasonic VIERA ConnectOver the course of approximately three weeks, I learned the ins and outs of the original VIERA Connect API (Ajax-CE) and used it to develop a Snake game. In coming up with a name for the app, I observed that the Pansonic app market sorted apps alphabetically by title, with no option to sort by latest releases or popularity (official partners like Game Loft were given preferential treatment, with their apps pinned above the rest). With that in mind, I decided upon the name Apple Muncher to ensure that it would appear on the first page of available games for added visibility. In this short window of time, I had developed a full-featured game with 25 levels, multiple themes and an online high score system.

As indicated in previous installments, I was one of the first independent developers to jump aboard the Panasonic app market. At the time, there were less than two dozen apps available across all categories and almost all of these apps were from official partners like Netflix, Game Loft and Amazon. Upon inquiry, I was told by Panasonic that these partners were allowed special access to a “native” API that was not available to third party developers. As such, the big players were able to port their existing Web apps over with little hassle and could leverage far more capabilities than permitted by third party members.

With my app ready to go, I ventured over to the app submission section of the VIERA Connect portal. There was limited information provided apart from a few general guidelines and the submission form itself. I assumed the review and approval process would be comparable to iTunes and Google Play, but had to go in blind as no outside information existed about Panasonic’s app vetting process.

Submission Form

App SubmissionThe first objective was to prepare all of the assets and complete the online submission form. One aspect that threw me off guard was that the app had to be hosted on one of my own external servers. Although not a big deal, I had assumed that for quality control reasons Panasonic would had hosted these apps on their own servers in the same vein as Apple and Google. Panasonic, in fact, required both a production and staging URL where the app was to be hosted. Bare in mind that these apps are essentially JavaScript packages so they are hosted and served up in the same fashion as typical websites.

The most difficult part of asset generation came when having to prepare a set of screenshots. Since the only way to execute the app was via the television set itself, there was no easy way to capture the screen. On computers and mobile devices, the print screen functionality makes this an effortless process.  However, even an HD capture card connected to the TV would do no good, since the entire app was executed on the television’s internal OS with no video out capability.  Since the television supported SD cards, a welcomed feature would had been a ‘screenshot’ function that could be called from the code to save the screen’s current view to a PNG. Alas, that functionality did not exist.

My approach to acquiring the mandatory screenshots was a mix of painstakingly recreating the scenes sprite-by-sprite using graphic editing software, and photographing my television set’s screen and cleaning it up as best as possible in post-process. In the end, I had 4-5 screenshots that had to be scaled down to 480×270 for the submission form, and several different icons at 360×252, 160×112 and 256×60. The various icons are used on different screens of the app portal once the app has been installed.

The five screenshots I recreated via sprite-by-sprite graphic composition and taking physical photos of my television screen, due to the lack of any available screenshot functionality within the Panasonic API.

The five screenshots I recreated via sprite-by-sprite graphic composition and taking physical photos of my television screen, due to the lack of any available screenshot functionality within the Panasonic API.

The rest of the required metadata was mundane: Title, Description, Price, Available Countries, Supported Devices and so on. I set the price to $1.99 USD and indicated that it would work on all VIERA Connect capable television sets, which at the time was really only a single generation of sets. Finally, I submitted the form.  I received an automated email confirming the submission but with no additional information about how or when it would be reviewed. The email simply said “Application created (automatic notification).”

Price Considerations

When submitting the app, I made careful considerations about the price point. Realistically, I had no knowledge of how many VIERA Connect capable television sets had been sold and, in turn, did not know what the user-base would ever conceivably amount to. I researched Panasonic press releases, stockholder data and other avenues yet was still unable to ascertain with any grade of certainty how many compatible sets had been sold.

Piggy BankIn the mobile and PC markets, freemium and free-to-play revenue models have become so popular for good reason. By releasing an application free-of-charge, the potential exists for many more users to discover and try it out without any financial investment required. Revenue from free applications can still be earned any number of ways including via in-app purchases and advertisements. I have had great success in other markets by releasing free ad-supported apps that offered optional paid upgrades.

Unfortunately, the Panasonic API did not offer any sort of revenue-generating capabilities for free apps. There was no way to include third party advertisements or in-app upgrades. Likewise, no ability existed to allow a time-based trial so that users could enjoy the full app for a limited amount of time before having to purchase it (a much-welcomed feature on the Microsoft app store for Windows and Xbox).

Given the fact that I had already invested a month of my time and approximately $130 on the developer license, the only feasible way to make any return on my investment was to charge for the app. Other apps on the market cost about $1.99 average, so that is what I went with. In this way, if I could sell even 100 copies I would at least break even after all fees and expenses.

A couple of days after I submitted my app, I was approached by a member at Panasonic who encouraged me to make a free version of the app. They only supported paid apps in the United States and Europe, whereas the free version would be available to “100 countries” and instantly open the doors for “tens of thousands of players.” Still unclear was how many potential users existed within the United States and Europe alone, but I was reluctant to rework the app as a free version and go through the entire submission process a second time when my first submission hadn’t yet been approved.

Required App Documentation

The first correspondence about my app’s submission came two days later, where a Word document attachment advised me to complete more detailed documentation for the app.  This paperwork was about seven pages long and required the creation of an application flow diagram, sectional information, technical requirements, cheat codes to allow the testers to progress through the game, screenshots and more.

The application flow diagram I had to create as part of the documentation for this simple game.

The application flow diagram I had to create as part of the documentation for this simple game.

With the documentation complete I sent it back via email. Four days later, I got another email that my app status had been changed to “In QA.

Quality Assurance

Approximately a week after my initial submission, my app went into the “quality analysis” phase by Panasonic.  I had assumed this was not unlike Apple setting the status to “under review” after submitting an app through their market.  However, that thought quickly went astray as I got the report back from “the first round” of my testing in the form of a detailed spreadsheet.

Round One Testing: Four Failures [January 30]

The spreadsheet I received included four reported issues across two categories including Message Prompts and Functionality.

  • If there is no connection to the network or server, an error message SHOULD be displayed.
  • The game speed is too fast for the lower level. Cannot go to next row. ↑→↓ / →↓← etc
  • Name Textbox is not cleared after Pressing Cancel / Submit.
  • Highlight Day week month year in scores

Three of the four listed failures were related to the user experience, and seemed heavily subject to personal preference. I and several others who tested the original game did not have any trouble navigating the snake across the levels at the default speed. The game also supports keyboard controls for more responsive input, for those who do have a USB keyboard hooked up. Even so, I agreed to amend this and subsequently added a ‘easy’ and ‘hard’ mode, where the hard mode is what the original speed was. I added some checking to see if there was a connection error and made it so the high score buttons were highlighted more correctly.


The reported issue of “Name Textbox is not cleared after Pressing Cancel / Submit” was a deliberate design decision I made when coding the game. In playtesting, I found that having to repeatedly enter your name at the end of each round was a nuisance and very time-consuming with the on-screen keyboard. In the majority of use-case scenarios, the same person would often play multiple rounds of the game in a row. As such, I intentionally retained the entered name until the user exited the app. They were still able to delete and replace the name as they needed, but as a user convenience I stored it in memory. This feature was seen as an issue by the QA person at Panasonic, who must have preferred to manually re-enter their same name every time.

[Sidenote: Panasonic did not publicly allow third party developers to interface with the SD card so there was also no advertised way to store any app data internally; once the app closed all data would be wiped clean. There also was no way to get a unique ID for each device to store and retrieve personalized data remotely in any easy manner.]

I took care of all of the issues and wrote my comments and arguments in the spreadsheet. I disputed the name issue and explained the convenience factor of storing the previous name, but still made some enhancements to it so anyone who did want to change the name could type it immediately without having to manually erase the stored value. I sent back the revised spreadsheet.

Round Two Testing: One Failure [February 2]

A couple days later, I received a second round of testing results. The three previously listed Functionality issues had now passed their requirements. However, they were still hanging on the network connectivity issues, and included these unlikely steps to reproduce the issue:


  • Start the game > Unplug the Ethernet cable > Play the game > Submit a score

I had already worked in safeguards against a loss of connectivity to my server for any reason, but now was being told that if a person explicitly unplugs their network cable or adapter from the TV it should detect and warn of this in the app. I personally felt that if it came down to a total loss of Internet signal, the television firmware itself should monitor and alert the user since no aspect of the app portal or OS is accessible without connectivity. In either case, I spent additional time reworking the behavior so that if the user did unplug their network cable or otherwise lost total connectivity, then tried to submit a score, a more direct error notice would display.

With this and some additional refinements in place, I submitted the revised spreadsheet once again.

Round Three Testing: No Failures [February 8]

Finally after more than a week of QA testing and fixing, I got the good word that my app has passed the “Initial QA” and would “be sent to the QA team at Panasonic Headquarters for final round testing.” Say what? Apparently even after all of this there was still another round of vigorous testing to go. In this email notice I had to also confirm that it was an original creation and did not violate any copyright laws. Still, progress was progress.

Round Four Testing: Weeks Upon Weeks in Limbo [March 19]

This last bout of testing took a staggering 5 weeks to complete. During this time, I received a few other emails including:

  • Paid app support was now available in Canada alongside US and Europe. [March 6]
  • The app is officially now entering QA testing. [March 7].
  • BlackBerry App World / RIM / Digital River contract data for managing the app sales. [March 12]

On March 19, my app was finally marked as Approved and Waiting to Go Live. Hurray! Well, it was approved, but still hadn’t gone live. So I played the waiting game a little longer.

App Status Updated: Finally Live! [April 1]

Finally, after more than nine weeks had passed since I first submitted the app, it went live on the Panasonic app portal. Keep in mind that my app was one of the only new submissions that would had needed to be tested as I was one of only a few third party developers to try out the platform. Meanwhile, Apple is able to test and approve apps in about a week’s time period despite having thousands of new apps to run through at any given time, Amazon generally reviews apps within 24 hours and Google within several hours.

I was just relieved to have made it through the unforgiving validation process. To Panasonic’s credit, the spreadsheets detailing the specific issues were thorough and far more informative than the details (or lack thereof) you get if your app is rejected during Apple’s approval process.

Apple Muncher Panasonic

Whew! After over two months of “quality assurance” testing, my app was finally available on the Panasonic app market.

In the final installment of this postmortem, I will be detailing all of the post-launch events. This will include app usage statistics, revenue and further developments.

Fully Automated Image Processing for eBay

eBay LogoWhen I list items for sale on eBay, I use a custom-developed HTML template with the item’s pictures uploaded externally and embedded into the description for more visual appeal than what eBay provides. This allows me to apply custom styles to the images via CSS, provide descriptive content below specific images and generally offers a lot more flexibility and professionalism.

By default, eBay allows you to upload up to 12 images for free to be included in the ad, and requires uploading at least one image through their service to be displayed in the auction results and so forth. The images uploaded in this manner appear at the very top of the auction page alongside the auction metadata. These eBay-hosted pictures are scaled to 500x375px regardless of the user’s screen resolution, with an option to view larger versions by clicking/hovering over them.

eBay Example Ad

An example eBay ad depicting the fixed image resolution and placement using the default eBay image hosting.

This layout is convenient for when users first visit an auction or when there is not a lot of descriptive content needed, as all the information the user needs is right up at the top without needing to scroll. The functionality of the image slideshow and enlarging has also improved substantially over the years from when eBay first started offering free image hosting.  I want to also emphasize, before describing my automated method of image processing and hosting, that it is still essential to use eBay’s own image hosting service alongside your own (for up to 12 images) so that you can still embrace their free top-of-the-page slideshow.

The Tedious Process of Manually Hosting Pictures

There are usually a lot of steps involved in taking photographs and ultimately embedding them into your eBay auction description. In my case, managing images (with or without using eBay’s own service) proved to be the most time-consuming process of listing an item. The basic process of capturing, transferring, optimizing and re-saving images can itself consume a lot of time. The general method many people use for manual image preparation and hosting is as follows:

  1. Take the photographs of the item you wish to list on a digital camera.
  2. Transfer the pictures to your computer using a card reader, direct connect or via WiFi on supported cameras.
  3. Open the images in a photo editor and resize them to reduce file size and load time.
  4. Enhance each image by adjusting brightness, levels etc.
  5. Re-save the optimized images, renaming them as needed.
  6. Connect to an FTP server or file host via a third party application.
  7. Upload all of the auction item pictures to the remote server.
  8. Add custom HTML tags for each image within your auction description, specifying the full URL and image names accordingly.

Writing an Automated Script to Do It All

I hate needless repetition and boring tasks. With that in mind, I set out to create a completely automated system of transferring, resizing, enhancing, saving, uploading and embedding images into a custom HTML document. Essentially, I wanted to be able to perform steps #2 through #8 above with a single click after inserting my camera’s memory card into my computer. The end result is a batch file that does exactly that!

Baseline Script Requirements

To successfully use my automated script provided below, a few basic requirements need to be in place.

  • You must have a memory card reader for transferring your camera’s photos (direct connect would also work, but WiFi will not).
  • You must have an external FTP server/host available for transferring the images to (e.g., and know the login credentials.
  • You must know the location on the FTP server where your eBay images should be uploaded to, and that directory must be created. (e.g., /ebay/)
  • You must know the absolute URL of where the images are accessible once uploaded (e.g.,
  • You must have the ImageMagick command-line tools installed and available to the system (see below).
  • You should transfer the photos via this script on a per-item basis (i.e., after taking a set of photos for one specific item).

Using ImageMagick for Image Enhancements and Optimization

ImageMagickTo apply image enhancements and resizing as part of the automated process, I embrace the free, cross-platform library ImageMagick. This set of tools enables you to perform any number of programmatic operations on as many images as needed from a command-line interface, in a very efficient manner. To install the necessary components, head on over to the Binary Releases page of the ImageMagick website and review the instructions for your particular platform.

Note that I wrote my script to run on Windows as a standard batch file, so if you are using another operating system you will have to revise the script accordingly using commands available to that platform. For Windows, there are a number of ImageMagick binary packages available. You will want to get the one that matches your machine’s architecture (32-bit or 64-bit); the static variant works fine for this process. In this example, I downloaded the ImageMagick-6.9.3-5-Q16-x64-static.exe installer and ran it. I changed the install path to C:\ImageMagick\ as a personal preference so that it is a short path with no spaces and within a writable location.

Important: To verify that ImageMagick has been installed and mapped correctly on your machine, open a command prompt / terminal and enter:

You should then see a few lines of information about the currently installed version of ImageMagick—this means it is ready to roll! If you attempt to run this command in a write-protected directory, you may instead get the message “Invalid drive specification.” Don’t fret, this still indicates that the ImageMagick library is installed successfully.

If you instead get the message that “‘convert’ is not recognized as an internal or external command” when running the above command, you will need to add the base path (i.e., c:\imagemagick\) to your environmental path.

Finally, the Script!

With all that headway taken care of, all that remains is to present my batch file script. You will want to copy the contents below into a new text file, and save it as “Images.bat” or whatever you prefer. The batch file should be placed in the base directory where you wish to store all eBay photos on your computer (i.e., C:\ebay\). Make sure, when saving, to wrap the name in quotes to ensure that the extension is not overwritten (especially important if using Notepad).

As a convenience, the script below can also be downloaded as a batch file here: Images.bat

Important: See below the script for initial setup details.

Initial Script Setup

The script is well-commented and generally self-explanatory. Under the “Initialization and Variable Declaration” section, you will need to update the following:

  • FTP Details: Your FTP host, username, password, and directory to navigate to once connected before uploading images (the directory must already exist). Note that since this is stored in plaintext, you may wish to create a custom FTP account through your host and restrict its access to the ebay pictures folder, and use those account credentials here.
  • Remote URL: The absolute URL that the images will be accessible at. (i.e.,
  • Memory Card: The full system path to your memory card’s photo location (i.e., E:\DCIM\123D4567\)
  • Image Prefix: The first few letters or numbers that your camera prepends to each image (i.e., DSC).
  • Image Width: The width, in pixels, that the image should be resized to. This depends on your HTML template but should never exceed 1390px as that is the maximum available space eBay provides for the description content (1460px body – 70px padding).

When you launch the batch file, you will be prompted for a Base Photo Name. This should reference the item in a few unique letters to ensure no conflicts arise when uploading to the server (i.e., alarmclock). The script will then name the images accordingly (i.e.,  alarmclock-1.jpg, alarmclock-2.jpg).

After entering the base photo name, hit ENTER and the rest should be automated! At the end, the HTML image tag code will already be copied to your clipboard and ready for insertion into your favorite HTML template or directly into the eBay description field.

Script Notes and Information

  • Delayed expansion is disabled and enabled a couple times in the script to best handle different types of variables and operations.
  • A temporary JavaScript file is created to generate a YYYYMMDD string of the current date, for the folder naming, and is then deleted.
  • The images are temporarily renamed to *.tmp during processing to prevent conflicts with previously stored images in the same directory; if you are using the script to process multiple photo sets on a single day, this ensures no file overwriting or redundant processing.
  • The ImageMagick tool Mogrify is used to enhance and optimize the images. I apply the “normalize” filter to improve visual contrast and brightness, but you can experiment with others such as “auto-levels” for differing effects.
  • A temporary text file is created in the current picture directory named html.txt that stores the generated HTML image tags with the uploaded image paths. This data is copied to your clipboard automatically by the script, but the file is preserved so that it can be accessed in the event that you copy something else to your clipboard before pasting the data. You can uncomment line 133 (del html.txt 2>NUL) if you’d wish for this file to be deleted automatically.
  • The FTP functionality creates a temporary secondary batch file for queuing the FTP login, navigation and uploading commands. This file is deleted automatically on finish.

Making the Images Responsive and Getting Creative

The script presented above generates the bare-minimum HTML required for inserting full-sized images into your custom HTML template. As-is, this method will display the images at their original dimensions (as defined via the imagewidth declaration and up to 1390px wide on eBay) regardless of the user’s screen resolution or platform. This means that on mobile devices–where the user may only have a 320px wide viewport–the page contents in their entirety will be shrunk down on most browsers, resulting in the microscopic text effect seen often on non-mobile optimized sites and forcing the user to zoom-in and scroll horizontally.

There are a few simple ways to remedy this issue. One could hard-code width="100%" height="auto" attributes into each image tag (by modifying the script above slightly), thus ensuring that the images will stretch to the maximum space allocated by its parent container. However, this adds unnecessarily to the body content and also provides quite limited customization. My personal recommendation is to instead embed the generated image HTML code inside of a custom parent container, and then add styles to your template that set the parent image container attributes along with the images themselves, as follows:

Insert the generated image HTML tags into a custom image container element:

At the top of your template code, add styles for the image container and item images.

The .imgContainer styles ensure that it will not exceed 100% width and also put in basic center alignment properties so the images will appear centered on-screen. The .imgContainer img styles specify a 100% width and auto height so the images will scale to full-width while retaining their original aspect ratio. I also add some general styling to give the images soft corners, a shaded border and other basic attributes. If you do not want to scale-up any images beyond their original size, change the width parameter to max-width.

With this modified code, assuming your overall template container (either a TABLE or another DIV) also has a width property of 100%, the images will then scale appropriately depending on the user’s resolution.

2016/03/20 Edit: Added a blurb about converting the generated images into a responsive format to ensure proper rendering on mobile devices.