NOTICE: By continued use of this site you understand and agree to the binding Terms of Service and Privacy Policy.
// ==UserScript==
// @name CamelCamelCamel Price History and Sales Rank
// @description Embeds CamelCamelCamel charts in Amazon product pages
// @author Rami S Ejailat
// @copyright RamiEjailat (https://openuserjs.org/users/RamiEjailat)
// @license MIT
// @version 20250131
// @namespace http://tampermonkey.net/
// @include *://*.amazon.tld/dp/*
// @include *://*.amazon.tld/*/dp/*
// @include *://*.amazon.tld/gp/product/*
// @include *://*.amazon.tld/*/ASIN/*
// @exclude *://aws.amazon.tld/*
// @grant none
// @icon https://www.amazon.com/favicon.ico
// @run-at document-idle
// ==/UserScript==
/* jshint esversion: 6 */
(function () {
'use strict';
// Map Amazon domains to CamelCamelCamel country codes
const countryMap = {
'com': 'us',
'ca': 'ca',
'cn': 'cn',
'de': 'de',
'es': 'es',
'fr': 'fr',
'it': 'it',
'co.jp': 'jp',
'co.uk': 'uk',
'com.au': 'au'
};
// Extract the country code from the domain
const domain = document.domain.toLowerCase();
const country = countryMap[domain.split('.').pop()] || 'us';
// Get the ASIN from the page
const asinElement = document.querySelector(`[id="asin" i]`);
if (!asinElement) {
console.error('CamelCamelCamel:', 'Target element (#ASIN) not found on the page.');
return;
}
const asin = asinElement.value.trim();
// Define chart parameters
const duration = '3m'; // Options: "all", "1y", "6m", "1m"
const width = document.body.clientWidth;
const height = 400;
// Construct the CamelCamelCamel chart URL
const chartUrl = `https://charts.camelcamelcamel.com/${country}/${asin}/amazon-new-used.png?force=1&zero=0&w=${width}&h=${height}&desired=false&legend=1&ilt=1&tp=${duration}&fo=0&lang=en`;
const chartLink = `https://${country}.camelcamelcamel.com/product/${asin}`;
// Create the chart container
const chartContainer = document.createElement('div');
chartContainer.id = 'camelcamelcamel';
chartContainer.style.margin = '10px';
chartContainer.style.clear = 'both';
// Create the chart image and link
const chartImage = document.createElement('img');
chartImage.src = chartUrl;
const chartLinkElement = document.createElement('a');
chartLinkElement.href = chartLink;
chartLinkElement.target = '_blank';
chartLinkElement.append(chartImage);
// Append the chart to the container
chartContainer.append(chartLinkElement);
// Insert the chart into the DOM
const targetElement = document.querySelector(`[id="ppd" i]`);
if (targetElement) {
targetElement.after(chartContainer);
} else {
console.error('CamelCamelCamel:', 'Target element (#ppd) not found on the page.');
}
})();