South Africa


The South African Transfer Pricing rules are set out in Section 31 of the Income Tax Law, Act No. 58 of 1962, effective as of July 1, 1995, supported by Practice Note No. 7, and published on August 6, 1999, which provides additional guidance to taxpayers on determining compliance with the Arm’s Length Principle relating to cross-border related party transactions. These rules are under the OECD Guidelines.

The South African Tax Laws Amendment Bill was published in December 2019 and presented the first material amendment to the Transfer Pricing Regulations for several years.

Related Parties

Section 1 of the Income Tax Law encompasses “related persons” in natural persons, trusts, partnerships, and companies. This includes an enterprise, which could be the same person (such as a branch) participating directly or indirectly in the management, control, or capital of another enterprise.

For companies, it can be summarized as including members of a group where the common shareholding exceeds 50% and companies with at least a 20% shareholding in a company where no other shareholder has a majority of the voting rights in the company.

Transfer Pricing Methods

South Africa adopts the five methods recognized by the Organization for Economic Cooperation and Development (OECD). They are listed below:

  • Comparable Uncontrolled Price Method.
  • Cost Plus Method.
  • Resale Price Method.
  • Profit Split Method.
  • Transactional Net Margin Method.

There is no hierarchy of methods. You may apply the most appropriate method as a criterion.

Transfer Pricing Documentation

Country by Country Report

Country-by-Country Reports must be filed by the ultimate parent company of a multinational enterprise or the Reporting Entity if it is not the same as the ultimate parent with a consolidated turnover of 10 thousand million South African Rand (ZAR) or more.

Master File

South African taxpayers who conform to the ultimate parent company of a multinational enterprise must prepare the Master File. The Master File includes key information on the Group’s global transactions, as well as an overview of the business transactions and important information on the global Transfer Pricing policies.

Companies in South Africa must file a Master File if aggregate cross-border related party transactions exceed ZAR 100 million, applicable to assessment years commencing as of October 1, 2016.

Local Report

The Local Report has detailed and supportable information on the intercompany transactions performed by the local company with its foreign-related parties. South African multinational companies will file the Country-by-Country Report and the Local Report as part thereof, regardless of the value of cross-border related party transactions for a particular year.

The documentation is not required to be filed by a person whose potentially affected transactions are below the Rand 100 million threshold. Conversely, when filing the ITR 14 tax return, the taxpayer is required to disclose whether the transfer pricing documentation has been prepared.

Transfer Pricing Penalties

Penalties for non-compliance comprise percentage-based penalties under sections 210 (1) and 211 of the Tax Administration Act (TAA). The amount of the penalty receivable depends on a taxpayer’s taxable income and can range from ZAR 250 to ZAR 16,000 for each month of non-compliance.

Read More

 Author:       Wolfgang Hartl
 Author URI:
function WCD_rmrl(options) {
  const readLessText = options.readLessText;
  const readMoreText = options.readMoreText;

  const rmrlContent = document.querySelectorAll("[wcd_rmrl_percentage]");

  rmrlContent.forEach((element) => {
    // INITIAL SETUP (define height, overflow and attributes) = "hidden";
    element.setAttribute("wcd_rmrl_max", element.clientHeight + "px");

    var percentage = element.getAttribute("wcd_rmrl_percentage");
    var height = element.clientHeight;
    height = Math.round((height / 100) * percentage) + "px";

    element.setAttribute("wcd_rmrl_min", height); = height;

    trigger = element.nextSibling;
    trigger.addEventListener("click", function () {
      if ( == element.getAttribute("wcd_rmrl_min")) { = element.getAttribute("wcd_rmrl_max");
        this.childNodes.forEach((node) => {
          if (node.nodeValue !== null) {
            node.nodeValue = readLessText;
      } else { = element.getAttribute("wcd_rmrl_min");
        this.childNodes.forEach((node) => {
          if (node.nodeValue !== null) {
            node.nodeValue = readMoreText;
  const rmrl = new WCD_rmrl({
    readLessText : 'Read Less',
    readMoreText : 'Read More',


Contact us

In order to contact us, please fill out the following form:

Google reCaptcha: Invalid site key.